Wenn Sie einen Pandas DataFrame wie diesen haben:
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
Aber mit ungefähr 100 000 Einträgen suche ich nach zeilenweisen Hinzufügungen und Entfernungen dieser Listen in den beiden Spalten.
Es ist vergleichbar mit dieser Frage: Pandas: Wie vergleiche ich Spalten von Listen zeilenweise in einem DataFrame mit Pandas (nicht für Schleife)? aber ich betrachte die Unterschiede, und die Pandas.apply
Methode scheint für so viele Einträge nicht so schnell zu sein. Dies ist der Code, den ich derzeit verwende. Pandas.apply
mit numpy's setdiff1d
Methode:
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)
Dies funktioniert einwandfrei, dauert jedoch ungefähr eine Minute für 120 000 Einträge. Gibt es einen schnelleren Weg, dies zu erreichen?