如何判断Pandas某列的值是否存在于另一列的列表字符串中?
问题解决:判断Pandas DataFrame中Value是否存在于List列的字符串列表中
原始数据
现有如下Pandas DataFrame:
import pandas as pd import numpy as np df = pd.DataFrame({'List': ['[7%, 9%, 30%]', '[9%, 30%]', '[7%]'], 'Value' : ['7%', '0%', '7%']})
初始表格输出:
List Value [7%, 9%, 30%] 7% [9%, 30%] 0% [7%] 7%
需求说明
新增一列CTRL,用于判断每行的Value值是否存在于对应行List列的列表字符串中,预期输出如下:
List Value CTRL [7%, 9%, 30%] 7% True [9%, 30%] 0% False [7%] 7% True
尝试的错误代码
用户尝试过以下代码但未成功:
df['CTRL'] = np.where([item for item in df['List']] == df['Value'], True, False)
可行解决方法
方法1:直接字符串包含判断
利用字符串的包含特性快速判断,注意转义正则特殊字符%:
# 向量化操作,转义%避免正则匹配错误 df['CTRL'] = df['List'].str.contains(df['Value'].str.replace('%', r'\%'), regex=True)
或者用apply逐行判断:
df['CTRL'] = df.apply(lambda row: row['Value'] in row['List'], axis=1)
方法2:转为列表后精准判断
如果需要避免类似77%被误判为包含7%的情况,可先将List列的字符串转为实际列表再判断:
# 处理List列,去掉首尾[]并分割为字符串列表 df['List_processed'] = df['List'].str.strip('[]').str.split(', ') # 判断Value是否在处理后的列表中 df['CTRL'] = df.apply(lambda row: row['Value'] in row['List_processed'], axis=1) # 可选:删除临时处理列 df.drop('List_processed', axis=1, inplace=True)
结果验证
运行上述任意方法后,输出符合预期:
print(df)
输出:
List Value CTRL 0 [7%, 9%, 30%] 7% True 1 [9%, 30%] 0% False 2 [7%] 7% True
内容的提问来源于stack exchange,提问作者A2N15
相关产品推荐
相关产品推荐

