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

Pandas DataFrame按ORDER ID与ASIN匹配映射Original Invoice ID 重复值逐行对应

Pandas DataFrame 按组合行顺序匹配字段值实现

样例数据

第一个DataFrame结构如下:

df1 = pd.DataFrame({'Original Invoice ID' : ['IN-11','IN-12','IN-13','IN-14','IN-15','IN-16'],
                    'ORDER ID' : ['123','123','123','456','996','864'],
                    'ASIN' : ['ABC','ABC','ABD','KSF','HKS','AJK']})

第二个DataFrame结构如下:

df2 = pd.DataFrame({'Invoice ID' : ['IN-C-45','IN-C-46','IN-C-47','IN-C-48'],
                    'ORDER ID' : ['123','123','456','864'],
                     'ASIN' : ['ABC','ABC','KSF','AJK']})

需求说明

基于ORDER ID和ASIN两个字段的匹配规则,为df2填充来自df1的Original Invoice ID字段值。
特殊规则:当df1中存在ORDER ID与ASIN均相同的重复记录时,需按照行顺序逐行对应映射,避免重复取值。

实现思路

  • 对df1和df2分别按ORDER ID、ASIN字段分组,为每个分组内的行生成从0开始的递增序号group_seq,标记同一组合下的行顺序
  • 以ORDER ID、ASIN、group_seq三个字段作为关联键,将df2与df1进行左连接,即可实现同组合下按行顺序逐一匹配,避免重复取值
  • 最后删除辅助生成的group_seq字段即可得到最终结果

实现代码

import pandas as pd

# 给df1生成组内序号
df1['group_seq'] = df1.groupby(['ORDER ID', 'ASIN']).cumcount()
# 给df2生成组内序号
df2['group_seq'] = df2.groupby(['ORDER ID', 'ASIN']).cumcount()

# 多键左关联匹配
result = df2.merge(
    df1[['ORDER ID', 'ASIN', 'group_seq', 'Original Invoice ID']],
    on=['ORDER ID', 'ASIN', 'group_seq'],
    how='left'
)

# 删除辅助列
result = result.drop('group_seq', axis=1)

输出结果

Invoice IDORDER IDASINOriginal Invoice ID
IN-C-45123ABCIN-11
IN-C-46123ABCIN-12
IN-C-47456KSFIN-14
IN-C-48864AJKIN-16

内容的提问来源于stack exchange,提问作者Akshay Tarpara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:54:03