You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 05:12:02