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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:20:56