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

如何基于列表值是否存在为Pandas DataFrame新增列

解决方案

我来帮你搞定这个需求!首先得提个小建议:你把目标值列表命名为a,和DataFrame里的列名a重名了,这很容易造成变量混淆,建议改成target_values这类清晰的名字,避免踩坑~

高效向量化方法(推荐)

Pandas最擅长向量化操作,这种方法速度快、代码简洁,是处理这类问题的首选:

首先初始化你的数据(调整了列表名):

import pandas as pd

train = pd.DataFrame({'a' : [22, 45, 68],'b' : [11, 23, 89], 'c' : [17, 49, 56]})
target_values = [17,21,12,89,77,99]

然后执行下面的代码新增标记列:

train['has_target'] = train.isin(target_values).any(axis=1)

代码解释

  • train.isin(target_values):生成一个和原DataFrame结构一致的布尔值DataFrame,每个单元格标记对应的值是否存在于target_values列表中;
  • .any(axis=1):按行(axis=1)检查每一行是否有至少一个True,最终得到每行的判断结果。

执行后你的DataFrame会变成这样:

a   b   c  has_target
0  22  11  17        True
1  45  23  49       False
2  68  89  56        True

逐行遍历方法(适合理解逻辑)

如果想更直观地看到逐行判断的逻辑,可以用apply方法,但这种方法在大数据集上速度会慢很多,适合小数据量或者学习调试用:

train['has_target'] = train.apply(lambda row: any(val in target_values for val in row), axis=1)

代码解释

  • apply(lambda row: ..., axis=1):遍历DataFrame的每一行;
  • any(val in target_values for val in row):检查当前行的所有值中,是否有任意一个存在于目标列表里,返回布尔值。

结果和上面的方法完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:53:46