如何用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()
原理解释:
explode():把每个列表元素拆成单独的行,原索引保留eq(x):判断每个拆分后的元素是否等于目标值x,得到布尔值groupby(level=0).any():按原索引分组,只要组内有一个True,就返回True(表示原列表包含x)
这个方法完全没有用自定义循环或者lambda,纯Pandas原生操作,性能比apply好很多,尤其数据量大的时候优势明显。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

