Python实现多表按条件匹配取值合并为单表的方法
Python实现方案
用pandas库处理这类表格匹配合并任务效率最高,不需要写复杂的逐行判断逻辑,适合初学者快速实现需求。
前置准备
先安装pandas依赖,在终端执行命令:pip install pandas
完整实现代码
整体分三步实现:
- 导入库并加载/构造3张源表
- 合并分类型的分段表为统一映射表
- 以TABLE1为主表关联匹配SEGMENT字段,输出最终结果
import pandas as pd # ---------------------- # 1. 读取/构造3张源表 # ---------------------- # TABLE1 产品主表 df_product = pd.DataFrame({ 'Name of Product': ['Iphone X', 'HP', 'Galaxy S20', 'MAC Pro'], 'QTY': [9, 7, 8, 6], 'TYPE': ['Smartphone', 'LAPTOP', 'Smartphone', 'LAPTOP'] }) # TABLE2 笔记本品牌分段表 df_laptop_seg = pd.DataFrame({ 'BRANDS': ['HP', 'MAC Pro'], 'SEGMENT': ['GOLD', 'PREMIUM'] }) # TABLE3 智能手机品牌分段表 df_phone_seg = pd.DataFrame({ 'BRANDS': ['Iphone X', 'Galaxy S20'], 'SEGMENT': ['PREMIUM', 'GOLD'] }) # ---------------------- # 2. 生成分段统一映射表 # ---------------------- segment_mapping = pd.concat([df_laptop_seg, df_phone_seg], ignore_index=True) # ---------------------- # 3. 关联匹配得到结果 # ---------------------- df_result = df_product.merge( segment_mapping, left_on='Name of Product', right_on='BRANDS', how='left' # 左连接保证主表原有数据不丢失 ).drop(columns=['BRANDS']) # 删除匹配带来的重复品牌列 # 打印结果验证 print(df_result)
运行结果
执行代码后输出的结果完全匹配需求:
Name of Product QTY TYPE SEGMENT 0 Iphone X 9 Smartphone PREMIUM 1 HP 7 LAPTOP GOLD 2 Galaxy S20 8 Smartphone GOLD 3 MAC Pro 6 LAPTOP PREMIUM
注意事项
- 如果你的源数据存在于Excel/CSV文件中,把构造DataFrame的部分替换为
pd.read_excel('文件路径.xlsx', sheet_name='对应表名')或者pd.read_csv('文件路径.csv')即可 - 如果存在不同产品类型下同名品牌、对应分段不同的情况(比如某品牌同时做笔记本和手机,两个品类分段不一致),用更严谨的双字段匹配逻辑,避免匹配错误:
# 给分段表补充TYPE字段,和主表的TYPE字段对应 df_laptop_seg['TYPE'] = 'LAPTOP' df_phone_seg['TYPE'] = 'Smartphone' segment_mapping_strict = pd.concat([df_laptop_seg, df_phone_seg], ignore_index=True) # 同时按 品牌名+产品类型 两个维度匹配 df_result_strict = df_product.merge( segment_mapping_strict, left_on=['Name of Product', 'TYPE'], right_on=['BRANDS', 'TYPE'], how='left' ).drop(columns=['BRANDS'])
- 匹配结果中如果SEGMENT列出现空值,说明对应产品没有在分段表中配置映射规则,排查补充分段表数据即可
- 需要把结果导出到本地的话,直接执行
df_result.to_excel('匹配结果.xlsx', index=False)就能导出成Excel文件,导出CSV换用to_csv方法即可。
内容的提问来源于stack exchange,提问作者Ismail
相关产品推荐
相关产品推荐

