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

如何用Pandas风格方法筛选列表列含共同值的行

Pandorable方法筛选包含指定值的列表行

嗨,我来帮你搞定这个问题!你想要摆脱for循环,用更贴合Pandas风格的方式筛选出那些列表里包含共同值1的行,这就给你几个实用方案:

方法一:简洁直观的apply检查

这个方法直接对Series进行元素级检查,代码短且容易理解,适合中小数据量:

import pandas as pd

# 你的原始数据生成
df = pd.DataFrame( {'a':['A','A','B','B','B','C'], 'b':[1,2,5,1,4,6]})
d = df.groupby('a')['b'].apply(list)

# 目标值
target = 1
# 生成布尔掩码:检查每个列表是否包含目标值
mask = d.apply(lambda x: target in x)
# 筛选结果
result = d[mask]
print(result)

输出结果:

A    [1, 2]
B    [5, 1, 4]
Name: b, dtype: object

方法二:高效向量化的展开分组法

如果你的数据量较大,apply可能效率不够,这个方法利用Pandas的向量化操作,避免逐元素遍历:

import pandas as pd

df = pd.DataFrame( {'a':['A','A','B','B','B','C'], 'b':[1,2,5,1,4,6]})
d = df.groupby('a')['b'].apply(list)

target = 1
# 将列表展开为多行,保留原索引
expanded = d.explode()
# 筛选出等于目标值的行,再按原索引分组判断是否存在目标值
has_target = expanded[expanded == target].groupby(level=0).any()
# 筛选结果
result = d[has_target]
print(result)

这个方法通过explode把列表拆成单个元素,再利用分组和any()来判断每个分组是否包含目标值,性能比逐列表检查更好。

额外小技巧:如果要找多个共同值的交集

要是你以后需要筛选出同时包含多个值的行,比如既包含1又包含2的,只需要稍微修改apply的逻辑:

targets = {1, 2}
mask = d.apply(lambda x: targets.issubset(set(x)))
result = d[mask]

这样就能精准筛选出包含所有指定值的行啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:55:02