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

如何使用pandas.merge合并列名重合的多个DataFrame得到指定结果?

Pandas 多数据框合并实现目标结果

嘿,我来帮你搞定这个合并需求!先理清楚你的场景:你有三个DataFrame,其中df1是包含所有id的主表,df2和df3分别包含部分id对应的B值,想要把它们合并成保留df1所有行、对应B值匹配填充、无匹配则显示NaN的结果。

首先先把你给出的原始数据代码贴出来方便参考:

import pandas as pd
df1 = pd.DataFrame({'id': list('fghij'), 'A': ['A' + str(i) for i in range(5)]})
# df1输出:
#   A id
# 0 A0 f
# 1 A1 g
# 2 A2 h
# 3 A3 i
# 4 A4 j

df2 = pd.DataFrame({'id': list('fg'), 'B': ['B' + str(i) for i in range(2)]})
# df2输出:
#   B id
# 0 B0 f
# 1 B1 g

df3 = pd.DataFrame({'id': list('ij'), 'B': ['B' + str(i) for i in range(3, 5)]})
# df3输出:
#   B id
# 0 B3 i
# 1 B4 j

想要得到你目标中的结果,核心思路是先把df2和df3合并成完整的B列数据,再和df1做左连接,具体实现代码如下:

# 第一步:拼接df2和df3,得到包含所有B值的完整数据框
combined_b = pd.concat([df2, df3], ignore_index=True)

# 第二步:以id为连接键,将df1和combined_b做左连接
final = df1.merge(combined_b, on='id', how='left')

# 查看结果
print(final)

运行后就能得到你想要的输出:

A id    B
0 A0 f   B0
1 A1 g   B1
2 A2 h  NaN
3 A3 i   B3
4 A4 j   B4

简单解释下关键步骤:

  • pd.concat([df2, df3], ignore_index=True):把两个结构相同的DataFrame按行拼接,ignore_index=True用来重置索引,避免拼接后出现重复的索引值。
  • merge(..., how='left'):左连接会完全保留左边df1的所有行,右边combined_b中能匹配到id的就填充对应的B值,没有匹配到的(比如id='h')就自动填充NaN,完美契合你的需求。

如果你想写得更简洁,也可以把两步合并成一行代码:

final = df1.merge(pd.concat([df2, df3], ignore_index=True), on='id', how='left')

效果和上面的代码完全一样,只是少了一个中间变量而已。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:36:10