Al tener un Pandas DataFrame como este:
import pandas as pd
import numpy as np
df = pd.DataFrame({'today': [['a', 'b', 'c'], ['a', 'b'], ['b']],
'yesterday': [['a', 'b'], ['a'], ['a']]})
today yesterday
0 ['a', 'b', 'c'] ['a', 'b']
1 ['a', 'b'] ['a']
2 ['b'] ['a']
... etc
Pero con alrededor de 100 000 entradas, estoy buscando encontrar las adiciones y eliminaciones de esas listas en las dos columnas en forma de fila.
Es comparable a esta pregunta: Pandas: ¿Cómo comparar columnas de listas en fila en un DataFrame con Pandas (no para bucle)? pero estoy mirando las diferencias, y el Pandas.apply
método no parece ser tan rápido para tantas entradas. Este es el código que estoy usando actualmente. Pandas.apply
con numpy's setdiff1d
método:
additions = df.apply(lambda row: np.setdiff1d(row.today, row.yesterday), axis=1)
removals = df.apply(lambda row: np.setdiff1d(row.yesterday, row.today), axis=1)
Esto funciona bien, sin embargo, toma alrededor de un minuto para 120 000 entradas. Entonces, ¿hay una manera más rápida de lograr esto?