Quando si dispone di un Pandas DataFrame in questo modo:
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
Ma con circa 100000 voci, sto cercando di trovare le aggiunte e le rimozioni di tali elenchi nelle due colonne su una base di riga.
È paragonabile a questa domanda: Panda: come confrontare colonne di elenchi per riga in un DataFrame con Panda (non per loop)? ma sto osservando le differenze e il Pandas.apply
metodo sembra non essere così veloce per così tante voci. Questo è il codice che sto attualmente utilizzando. Pandas.apply
con numpy's setdiff1d
metodo:
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)
Funziona bene, tuttavia sono necessari circa un minuto per 120.000 voci. Quindi c'è un modo più veloce per raggiungere questo obiettivo?