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

如何用Pandas判断DataFrame列中列表是否包含指定值

嘿,这个需求我太熟了!完全可以用Pandas原生的操作搞定,不用写麻烦的循环或者推导式,给你两种靠谱的方案:

方案1:简洁直观的apply写法(类似你想要的原生API风格)

这种写法最贴近你说的df.isin那种直观调用,代码简洁可读性强,适合中小数据集:

首先先构造你给出的示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    'lists': [[], [1, 2], [1], [3, 4]]
})
x = 1  # 你要查找的值

然后直接用apply结合简单的判断:

contains_x = df['lists'].apply(lambda lst: x in lst)

运行后得到的结果就是你想要的布尔Series:

0    False
1     True
2     True
3    False
Name: lists, dtype: bool

方案2:高性能的原生操作链(无lambda,适合大数据集)

如果你的数据集很大,上面的apply因为本质是逐行循环,性能可能不够。这时候可以用Pandas的explode+groupby组合,完全是原生向量化操作,效率更高:

contains_x = df['lists'].explode().eq(x).groupby(level=0).any()

原理解释:

  1. explode():把每个列表元素拆成单独的行,原索引保留
  2. eq(x):判断每个拆分后的元素是否等于目标值x,得到布尔值
  3. groupby(level=0).any():按原索引分组,只要组内有一个True,就返回True(表示原列表包含x)

这个方法完全没有用自定义循环或者lambda,纯Pandas原生操作,性能比apply好很多,尤其数据量大的时候优势明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:15:47