Lorsque vous avez un Pandas DataFrame comme celui-ci:
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
Mais avec environ 100 000 entrées, je cherche à trouver les ajouts et les suppressions de ces listes dans les deux colonnes par ligne.
Elle est comparable à cette question: Pandas: comment comparer les colonnes de listes en ligne dans un DataFrame avec Pandas (pas pour la boucle)? mais je regarde les différences, et la Pandas.apply
méthode ne semble pas être aussi rapide pour autant d'entrées. C'est le code que j'utilise actuellement. Pandas.apply
avec numpy's setdiff1d
méthode:
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)
Cela fonctionne bien, mais cela prend environ une minute pour 120 000 entrées. Existe-t-il un moyen plus rapide d'accomplir cela?