You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效计算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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:08:00