如何基于REMISION与UBQ从原DataFrame填充新DataFrame缺失列?
基于双关联字段匹配填充DataFrame缺失列
核心方法是利用Pandas的merge()函数,以**REMISION(订单号)和UBQ(商品位置)**作为联合匹配键,将原DataFrame(PEDIDO)中的商品详情列批量填充到仅含这两个字段的新DataFrame(devol)中。
基础实现代码
import pandas as pd # 以REMISION和UBQ为联合键,左连接填充所有缺失列 devol_completa = pd.merge(devol, PEDIDO, on=['REMISION', 'UBQ'], how='left')
参数说明:
on=['REMISION', 'UBQ']:指定两个用于匹配的关联字段how='left':保留devol中的所有行,即使PEDIDO中无对应匹配项(无匹配的列会填充为NaN);如果确认devol的所有组合都在PEDIDO中存在,也可改用how='inner'
关键注意事项
统一字段数据类型:必须保证两个DataFrame中REMISION和UBQ的类型完全一致(比如同为字符串或整数),否则会出现匹配失败。检查及转换方式:
# 查看字段类型 print(PEDIDO[['REMISION', 'UBQ']].dtypes) print(devol[['REMISION', 'UBQ']].dtypes) # 转换为字符串类型(示例) devol['REMISION'] = devol['REMISION'].astype(str) PEDIDO['REMISION'] = PEDIDO['REMISION'].astype(str)处理重复匹配项:如果PEDIDO中存在同一(REMISION, UBQ)组合的多条记录,merge后会生成重复行。可先对原数据去重:
# 保留每个(REMISION, UBQ)组合的第一条记录 PEDIDO_limpio = PEDIDO.drop_duplicates(subset=['REMISION', 'UBQ'], keep='first') # 再执行填充 devol_completa = pd.merge(devol, PEDIDO_limpio, on=['REMISION', 'UBQ'], how='left')验证匹配结果:检查是否存在未匹配成功的行(对应列值为NaN):
# 筛选未匹配的记录 registros_no_coincidentes = devol_completa[devol_completa['centro costos'].isna()] print(f"未匹配到商品详情的记录数:{len(registros_no_coincidentes)}")
内容的提问来源于stack exchange,提问作者Isaac Chaljub
相关产品推荐
相关产品推荐

