Pandas如何获取DataFrame中两列列表的交集?
计算DataFrame每行两列列表的交集
给定包含列表列的DataFrame:
import pandas as pd df = pd.DataFrame({'one':[['a', 'b', 'c'], ['d', 'e', 'f'], ['h', 'i', 'j']], 'two':[['b', 'c', 'd'], ['f', 'g', 'h'], ['l', 'm', 'n']]})
要生成包含每行两列表交集的overlap列,以下是几种实用实现方式:
方法1:apply结合集合操作(直观易读)
通过逐行将列表转为集合求交集,再转回列表:
df['overlap'] = df.apply(lambda row: list(set(row['one']) & set(row['two'])), axis=1)
方法2:列表推导式(高效处理大数据)
对于数据量较大的场景,列表推导式的执行效率比apply更高:
df['overlap'] = [list(set(o) & set(t)) for o, t in zip(df['one'], df['two'])]
方法3:保留交集元素的原顺序
如果需要维持元素在原列表(如one列)中的出现顺序,避免集合打乱顺序,可使用遍历检查的方式:
df['overlap'] = df.apply(lambda row: [x for x in row['one'] if x in row['two']], axis=1)
最终结果
执行后得到的DataFrame如下:
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] []
内容的提问来源于stack exchange,提问作者Trevor Ban
相关产品推荐
相关产品推荐

