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

如何将Pandas DataFrame中列表列元素与同表另一列进行比对

Pandas 新增标记列:检查值是否存在于对应行的列表中

现有一个Pandas DataFrame,所有列的数据类型均为object。需求是:遍历每行的column_1(存储列表),检查column_2的值是否存在于该行的column_1列表中,新增flag列标记结果(存在为True,不存在为False)。

原DataFrame结构

column_1column_2
[value_1,value_2,value_3]value_2
[value_1,value_2,value_3]value_3
[value_1,value_2,value_3]value_7

期望结果

column_1column_2flag
[value_1,value_2,value_3]value_2True
[value_1,value_2,value_3]value_3True
[value_1,value_2,value_3]value_7False

解决方案

方法1:使用apply + lambda表达式

这是最直观的实现方式,按行遍历检查:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'column_1': [['value_1', 'value_2', 'value_3'],
                 ['value_1', 'value_2', 'value_3'],
                 ['value_1', 'value_2', 'value_3']],
    'column_2': ['value_2', 'value_3', 'value_7']
})

# 生成flag列
df['flag'] = df.apply(lambda row: row['column_2'] in row['column_1'], axis=1)

方法2:列表推导式(更高效)

如果处理大数据量,列表推导式的执行效率远高于apply:

df['flag'] = [col2_val in col1_list for col1_list, col2_val in zip(df['column_1'], df['column_2'])]

特殊情况处理:column_1是字符串形式的列表

如果column_1存储的是字符串(比如"[value_1,value_2,value_3]"),需要先将其解析为实际列表:

import ast

# 解析字符串为列表
df['column_1'] = df['column_1'].apply(ast.literal_eval)
# 再生成flag列
df['flag'] = [col2_val in col1_list for col1_list, col2_val in zip(df['column_1'], df['column_2'])]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:35:18