如何检查Pandas DataFrame值是否匹配字典规则并生成exist_or_not列
实现方案
核心逻辑
- 逐行匹配
supplierid从参考字典中取对应允许的name列表 - 校验当前行
name是否在允许列表内,匹配填yes,不匹配填no
代码实现
首先导入依赖、构造示例数据和参考字典:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'orderid': [101, 102, 103], 'supplierid': [1, 1, 2], 'name': ['x', 'z', 'x'] }) # 参考校验字典 ref_dict = {1: {'name': ['x', 'y']}, 2: {'name': ['z']}}
方法1:逐行apply判断(逻辑直观,适合小数据量)
df['exist_or_not'] = df.apply( lambda row: 'yes' if row['name'] in ref_dict[row['supplierid']]['name'] else 'no', axis=1 )
方法2:预构造映射再判断(性能更高,适合大数据量)
# 提前提取供应商到允许名称列表的映射,减少重复取值操作 supplier_name_map = {sid: val['name'] for sid, val in ref_dict.items()} # 把允许列表映射到DataFrame中再判断 df['exist_or_not'] = df.apply( lambda x: 'yes' if x['name'] in supplier_name_map[x['supplierid']] else 'no', axis=1 )
输出结果验证
运行后输出df即可得到预期结果:
| orderid | supplierid | name | exist_or_not |
|---|---|---|---|
| 101 | 1 | x | yes |
| 102 | 1 | z | no |
| 103 | 2 | x | no |
内容的提问来源于stack exchange,提问作者Maxima
相关产品推荐
相关产品推荐

