我有一个 Dataframe ,其中有两列,每列都包含列表。我想确定这两列中列表之间的重叠。
例如:
df = pd.DataFrame({'one':[['a', 'b', 'c'], ['d', 'e', 'f'], ['h', 'i', 'j']],
'two':[['b', 'c', 'd'], ['f', 'g', 'h',], ['l', 'm', 'n']]})
one two
0 [a, b, c] [b, c, d]
1 [d, e, f] [f, g, h]
2 [h, i, j] [l, m, n]
最终,我希望它看起来像:
one two overlap
0 [a, b, c] [b, c, d] [b, c]
1 [d, e, f] [f, g, h] [f]
2 [h, i, j] [l, m, n] []
3条答案
按热度按时间oxiaedzo1#
没有有效的矢量方法来执行此操作,最快的方法是使用
set
交集的列表解析:输出:
7nbnzgx92#
下面是使用
applymap
将列表转换为集合并使用set.intersection
查找重叠的方法:v2g6jxz63#
使用
pandas
Pandas
的实现方式可能是这样的-apply函数逐行(axis = 1)查找
one
列和two
列的列表之间的set.intersection()
,然后将结果作为列表返回。Apply
方法不是最快的,但在imo中相当容易理解。但由于您的问题没有提到速度作为一个标准,这不是问题。此外,您可以使用这两个表达式中的任何一个作为lambda函数,因为它们执行相同的任务-
使用
Numpy
您也可以使用numpy方法
np.intersect1d
以及2个系列上的Map。一个三个三个一个
基准
添加一些基准以供参考-