当具有这样的Pandas DataFrame时:
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
但是,我希望通过大约10万个条目在行的基础上在两列中找到这些列表的添加和删除。
它可与以下问题相提并论:Pandas:如何将DataFrame中的列表列与Pandas(不是for循环)进行比较? 但我正在研究这些差异,而且Pandas.apply
对于许多条目而言,方法似乎并不那么快。这是我当前正在使用的代码。Pandas.apply
使用numpy's setdiff1d
方法:
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)
效果很好,但是大约需要一分钟才能完成12万个条目。那么,有没有更快的方法来实现这一目标?
这些列之一最多可容纳多少个项目(在一行中)?
—
由此hv89
您是否尝试过所链接文章中的方法?特别是那些使用集合相交的集合,您所要做的就是使用集合差异,不是吗?
—
gold_cy
@aws_apprentice基本上是OP在这里提供的解决方案。
—
Quang Hoang
熊猫DataFrame可能不是正确的数据结构。您能否在程序和数据上共享更多背景知识?
—
AMC