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

pandas如何基于ID字段合并两个DataFrame并保持原数据维度

问题原因

你直接调用pd.merge(dataframe1,dataframe2, on = 'ID')执行的是同ID值下的笛卡尔积匹配:

  • dataframe1中ID=123有3条记录、ID=456有3条记录
  • dataframe2中ID=123、ID=456也各有3条记录
    直接按ID合并会生成3*3 + 3*3 = 18行结果,和你预期的6行输出不符。
实现方法

要实现同ID下记录逐行对齐合并、最终输出6行结果,只需要给两个表按ID分组后添加组内行序号,将「ID+组内序号」作为联合合并键即可,步骤如下:

  1. (可选)如果需要严格匹配你给出的目标输出顺序,先对dataframe2按字段排序:
import pandas as pd

dataframe2 = dataframe2.sort_values(by=['ID', 'ROW', 'LOCATION']).reset_index(drop=True)
  1. 给两个表分别添加ID分组内的行序号辅助列:
dataframe1['match_idx'] = dataframe1.groupby('ID').cumcount()
dataframe2['match_idx'] = dataframe2.groupby('ID').cumcount()
  1. 按ID和辅助序号列合并,最后删除辅助列即可得到结果:
result = pd.merge(
    dataframe1, 
    dataframe2, 
    on=['ID', 'match_idx']
).drop('match_idx', axis=1)

如果需要列顺序和示例完全一致,最后加一步列重排即可:

result = result[['ID', 'ROW', 'LOCATION', 'Attr1', 'Attr2', 'Attr3']]

运行后输出和你给出的目标结构完全一致:

ID ROW LOCATION Attr1 Attr2 Attr3
0  123   1        A   ABC   DEF   GHI
1  123   2        A   ABC   DEF   GHI
2  123   2        B   ABC   DEF   GHI
3  456   1        B   JKL   MNO   PQR
4  456   1        C   JKL   MNO   PQR
5  456   2        C   JKL   MNO   PQR

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:42:29