python - the - Pandas: Diferencia de dos Dataframes
difference between two df pandas (3)
Necesito comparar dos marcos de datos de diferente tamaño por fila e imprimir filas no coincidentes. Vamos a tomar los siguientes dos:
df1 = DataFrame({
''Buyer'': [''Carl'', ''Carl'', ''Carl''],
''Quantity'': [18, 3, 5, ]})
df2 = DataFrame({
''Buyer'': [''Carl'', ''Mark'', ''Carl'', ''Carl''],
''Quantity'': [2, 1, 18, 5]})
¿Cuál es la forma más eficiente de hacer filas en df2 e imprimir filas que no estén en df1?
Buyer Quantity
Carl 2
Mark 1
Importante: no quiero tener fila:
Buyer Quantity
Carl 3
Incluido en el diff:
Ya lo he intentado: comparando dos marcos de datos de diferente longitud fila por fila y agregando columnas para cada fila con igual valor y generando la diferencia en dos marcos de datos Pandas lado a lado, resaltando la diferencia
Pero estos no coinciden con mi problema.
Gracias
Andy
Intente lo siguiente si solo le interesa agregar los nuevos compradores a la otra df:
df_delta=df2[df2[''Buyer''].apply(lambda x: x not in df1[''Buyer''].values)]
merge
los 2 dfs usando el método ''exterior'' y pase el indicator=True
param indicator=True
Esto le dirá si las filas están presentes en / solo izquierda / derecha solamente, luego puede filtrar el df combinado después de:
In [22]:
merged = df1.merge(df2, indicator=True, how=''outer'')
merged[merged[''_merge''] == ''right_only'']
Out[22]:
Buyer Quantity _merge
3 Carl 2 right_only
4 Mark 1 right_only
diff = set(zip(df2.Buyer, df2.Quantity)) - set(zip(df1.Buyer, df1.Quantity))
Esta es la primera solución que vino a la mente. Luego puede volver a colocar el conjunto de diferencias en un DF para la presentación.