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

如何检测pandas Series是否包含列表/NumPy数组/Series中的元素

实现方案

优先把分类列表转为集合做交集判断,集合的元素查找时间复杂度为O(1),比直接遍历列表判断的性能高很多,数据量越大优势越明显。

完整实现代码

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'ID': [1, 2],
    'Animals': [['cat', 'dog', 'chicken'], ['penguin']]
})

# 分类列表转集合,优化判断性能
mammals = {'cat', 'dog', 'cow', 'sheep'}
birds = {'chicken', 'duck', 'penguin'}

# 生成标记列
df['ContainsBirds'] = df['Animals'].apply(lambda x: 1.0 if set(x) & birds else 0.0)
df['ContainsMammals'] = df['Animals'].apply(lambda x: 1.0 if set(x) & mammals else 0.0)

大数据量优化版本

如果你的DataFrame行数在10万以上,可以提前把每行的动物列表转为集合存为临时列,避免重复计算,进一步提升运行速度:

# 提前一次性把所有行的列表转集合,减少重复转换开销
df['_tmp_set'] = df['Animals'].apply(set)
df['ContainsBirds'] = df['_tmp_set'].apply(lambda x: 1.0 if x & birds else 0.0)
df['ContainsMammals'] = df['_tmp_set'].apply(lambda x: 1.0 if x & mammals else 0.0)
# 删除临时列
df.drop(columns='_tmp_set', inplace=True)

运行结果

执行代码后得到的DataFrame完全匹配预期输出:

IDAnimalsContainsBirdsContainsMammals
1[cat, dog, chicken]1.01.0
2[penguin]1.00.0

注意事项

  • 不要嵌套循环用列表in做判断,两层遍历的时间复杂度高,数据量大时运行速度会比集合方案慢数十倍
  • 如果需要整数类型的0/1标记,把代码里的1.0、0.0替换为1、0即可

内容的提问来源于stack exchange,提问作者Ambitions

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:18:20