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

Pandas:如何判断单列值是否在对应行的列表列中(不展开列表)

解决DataFrame逐行判断值是否在对应行列表中的问题

你的代码df.loc[df['value'].isin(df['column_of_lists']), 'is_in_column_of_lists'] = True之所以全返回False,是因为isin()的逻辑是检查value列的每个元素是否等于column_of_lists列中的某个列表对象,而非判断该值是否在对应行的列表内部。

下面是几种符合你需求(不展开列表列)的正确解法:

方法1:用apply逐行判断(直观易读)

通过apply遍历每一行,直接判断当前行的value是否存在于对应行的列表中:

import pandas as pd

# 构造示例数据
data = {
    'value': [1, 3, 1, 3],
    'column_of_lists': [[1,2,1,1], [3], [4,4], [0]]
}
df = pd.DataFrame(data)

# 生成结果列
df['is_in_column_of_lists'] = df.apply(lambda row: row['value'] in row['column_of_lists'], axis=1)

运行后得到的结果:

valuecolumn_of_listsis_in_column_of_lists
1[1,2,1,1]True
3[3]True
1[4,4]False
3[0]False

方法2:用列表推导式(性能更优)

列表推导式在处理小到中等规模数据时,比apply的执行速度更快:

df['is_in_column_of_lists'] = [v in lst for v, lst in zip(df['value'], df['column_of_lists'])]

补充:大数据量场景(可选,会临时展开列表)

如果你的数据集规模很大,上述方法效率不足,可以先临时展开列表再分组判断(虽然会生成临时多列,但性能更优):

temp_df = df.explode('column_of_lists')
temp_df['match'] = temp_df['value'] == temp_df['column_of_lists']
df['is_in_column_of_lists'] = temp_df.groupby(level=0)['match'].any()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:42:51