如何在DataFrame中筛选数组列包含指定值的记录?
问题描述
我的DataFrame df 如下所示:
RepID Arr 0 3 [E83, J99] 1 5 [P81, G39, E34] 2 6 [R19] ... ... 1857 8885 [G39, F14, T22]
我想要找出所有Arr列数组中包含值"G39"的记录,期望结果:
RepID Arr 1 5 [P81, G39, E34] 1857 8885 [G39, F14, T22]
尝试了以下代码但无效:
np.where(df["Arr"]=="G39")
得到的结果为空:
(array([], dtype=int64),)
请问如何获取目标记录列表?
解决方案
方法1:使用apply结合lambda函数
这是最直观的实现方式,对Arr列的每个列表元素直接检查是否包含目标值:
result = df[df["Arr"].apply(lambda x: "G39" in x)]
方法2:高效的explode+分组判断(适合大数据集)
如果你的DataFrame数据量较大,apply的效率可能偏低,可以用explode将列表拆分为多行,筛选出包含目标值的行后,再通过分组保留原行记录:
# 拆分列表为多行,筛选出包含G39的行,再分组标记原行是否符合条件 mask = df["Arr"].explode().eq("G39").groupby(level=0).any() result = df[mask]
原方法无效的原因
你用np.where(df["Arr"]=="G39")时,是将Arr列的整个列表和字符串"G39"做相等比较,而非检查列表内部是否包含该元素。显然没有任何一个列表等于"G39",所以返回空数组。
内容的提问来源于stack exchange,提问作者asmgx
相关产品推荐
相关产品推荐

