Python 2.7实现:检测列元素是否在主列表中并生成标记列
Python 2.7 下 DataFrame 匹配标记解决方案
核心思路
把master_list列转成集合(大幅提升成员查找效率),逐行判断list_1/list_2的元素是否在这个集合中,对应标记1或0即可。
代码实现
处理空白字符串的情况(匹配你提供的示例数据格式)
import pandas as pd # 构造示例DataFrame data = { 'list_1': ['a', 'b', '', '', ''], 'list_2': ['c', 'd', 'e', '', ''], 'master_list': ['a', 'b', 'c', 'd', 'e'] } df = pd.DataFrame(data) # 将master_list转换为集合,优化查找速度 master_set = set(df['master_list'].dropna()) # 生成l1列:空字符串直接标记0,存在则标记1 df['l1'] = df['list_1'].apply(lambda x: 1 if x.strip() in master_set else 0) # 生成l2列:同l1逻辑 df['l2'] = df['list_2'].apply(lambda x: 1 if x.strip() in master_set else 0) # 输出结果 print(df)
处理NaN空值的情况(如果数据中空值是NaN而非空白字符串)
如果list_1/list_2里的空值是NaN,调整判断逻辑即可:
# 生成l1列 df['l1'] = df['list_1'].apply(lambda x: 1 if pd.notna(x) and x in master_set else 0) # 生成l2列 df['l2'] = df['list_2'].apply(lambda x: 1 if pd.notna(x) and x in master_set else 0)
结果验证
运行代码后,输出的DataFrame会和你提供的示例结果完全一致:
list_1 list_2 master_list l1 l2
0 a c a 1 0
1 b d b 1 0
2 e c 0 1
3 d 0 1
4 e 0 1
内容的提问来源于stack exchange,提问作者Sachin Santhosh
相关产品推荐
相关产品推荐

