如何基于列表值是否存在为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
相关产品推荐
相关产品推荐

