Jeśli masz ramkę danych Pandas taką jak ta:
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
Ale mając około 100 000 wpisów, szukam dodawania i usuwania tych list w dwóch kolumnach według wierszy.
Jest to porównywalne z tym pytaniem: Pandas: Jak porównać kolumny z wierszami w ramce danych z Pandami (nie dla pętli)? ale patrzę na różnice, a Pandas.apply
metoda wydaje się nie być tak szybka dla tak wielu wpisów. To jest kod, którego obecnie używam. Pandas.apply
z numpy's setdiff1d
metodą:
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)
Działa to dobrze, jednak 120 000 wpisów zajmuje około minuty. Czy jest więc szybszy sposób na osiągnięcie tego?