如何高效计算Pandas数据框每行列表与指定列表的交集?
高效计算Pandas列表列与指定列表的交集
核心思路
把目标匹配列表转成集合(集合的交集操作效率远高于列表),再对数据框的列表列逐行计算交集,生成新列。
代码实现
1. 准备数据与环境
import pandas as pd # 将目标列表转为集合,提升交集计算效率 target_fruits = {'apple', 'orange', 'pineapple', 'banana', 'tomato'} # 构造你的数据框 df = pd.DataFrame({ 'fruits': [ ['apple', 'mango'], ['mango', 'cabbage', 'pineapple', 'carrot'], ['egg', 'sandwich', 'orange', 'carrot', 'tomato'] ] })
2. 快速生成结果列
用apply结合集合交集操作,一行代码完成需求:
df['output'] = df['fruits'].apply(lambda row: list(target_fruits.intersection(row)))
3. 验证输出
运行后查看数据框,即可得到期望结果:
fruits output 0 [apple, mango] [apple] 1 [mango, cabbage, pineapple, carrot] [pineapple] 2 [egg, sandwich, orange, carrot, tomato] [orange, tomato]
大数据量优化方案
如果数据框行数达百万级以上,apply的循环开销会比较明显,可改用矢量化方法:
# 拆解列表为单行,标记匹配项 exploded_df = df.explode('fruits') exploded_df['is_match'] = exploded_df['fruits'].isin(target_fruits) # 按原行分组,聚合匹配结果 df['output'] = exploded_df[exploded_df['is_match']].groupby(level=0)['fruits'].agg(list) # 给无匹配的行填充空列表 df['output'] = df['output'].apply(lambda x: x if isinstance(x, list) else [])
内容的提问来源于stack exchange,提问作者nerd
相关产品推荐
相关产品推荐

