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

如何基于指定匹配条件合并两个Pandas DataFrame数据框

基于code和id字段合并两个DataFrame的正确实现

错误原因说明

你之前的代码存在两个核心问题:

  • merge_asof是专为有序键(比如时间序列)的左对齐合并设计的,不适用当前需要按多个离散字段匹配的场景
  • 你指定的合并字段page在df1、df2中都不存在,运行会直接报错,更不可能得到预期结果

实现思路

你的需求里,相同code+id的分组下,需要让两个表的行按顺序一一匹配:

  • red+id=2分组:df1有3行、df2仅有1行,df1的3行都匹配df2的唯一grade值
  • blue+id=3分组:df1有3行、df2有3行,按行顺序依次匹配grade值
    要避免直接按code+id合并出现笛卡尔积(blue分组会生成9行冗余数据),只需要给两个表的每个分组新增组内顺序号,再把顺序号也加入合并键即可。

实现代码

import pandas as pd

# 原始数据定义
df1=pd.DataFrame({'text':['ASX-112','YTR-789','ASX-124','UYT-908','TYE=456','ERW-234'],
'code':['red','red','red','blue','blue','blue'],'id':[2,2,2,3,3,3]})

df2=pd.DataFrame({'grade':['a','b','c','d'],'code':['red','blue','blue','blue'],'id':[2,3,3,3]})

# 给每个code+id分组新增组内顺序列
df1['group_rank'] = df1.groupby(['code','id']).cumcount()
df2['group_rank'] = df2.groupby(['code','id']).cumcount()

# 按多键合并后删除辅助列
result = pd.merge(df1, df2, on=['code','id','group_rank'], how='left').drop('group_rank', axis=1)

输出结果

text  code  id grade
0  ASX-112   red   2     a
1  YTR-789   red   2     a
2  ASX-124   red   2     a
3  UYT-908  blue   3     b
4  TYE=456  blue   3     c
5  ERW-234  blue   3     d

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:48:01