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

如何实现Pandas DataFrame中重复键的顺序对应合并?

解决方案

要实现按组内行顺序匹配合并,你需要给两个DataFrame添加组内序号列,再基于Name和这个序号列进行合并,具体步骤如下:

  1. 给A和B分别添加组内计数列,标记每个Name下的行顺序:
import pandas as pd

A = pd.DataFrame({'Name' : ['A', 'A','A'], 'Value' : [1,2,3]})
B = pd.DataFrame({'Name': ['A', 'C', 'D', 'A', 'E', 'A'], 'Value1' :[1,2,3,4,5,6]})

# 为每个Name分组添加行序号
A['seq'] = A.groupby('Name').cumcount()
B['seq'] = B.groupby('Name').cumcount()
  1. 同时按Name和seq列做左连接合并,之后删除序号列:
result = A.merge(B, how='left', on=['Name', 'seq']).drop('seq', axis=1)
print(result)

执行后得到的结果完全符合预期:

Name  Value  Value1
0    A      1       1
1    A      2       4
2    A      3       6

原理说明

  • groupby('Name').cumcount()会对每个Name分组内的行从0开始递增计数,A里的3个'A'会被标记为0、1、2,B里的3个'A'也会对应标记为0、1、2。
  • 基于Name+seq合并时,只会匹配同组且同序号的行,彻底避免了普通merge按单一键值匹配产生的笛卡尔积问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:06:42