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

合并两个DataFrame时如何合并重复列且避免索引重复?

解决方案:合并DataFrame时自动合并重复列

我完全懂你的困扰——沿axis=1合并DataFrame时,相同列名会被拆成多列(比如示例里的两个B列),而直接用axis=0又会导致索引重复,破坏你需要的结构。

这里有个简洁且通用的方法,能完美解决你的问题:对合并后的DataFrame按列名分组,然后提取每行的第一个非空值。

核心代码逻辑

针对你提供的复杂场景,只需要在最后一步添加一行代码,就能把重复列合并成单一列:

df4 = df4.groupby(df4.columns, axis=1).first()

完整可运行示例

import pandas as pd

# 构建初始数据
dic={'A':['1','2','3'], 'B':['10','11','12']}
df1=pd.DataFrame(dic)
df1.set_index('A', inplace=True)

dic2={'A':['4','5','6'], 'B':['10','11','12']}
df2=pd.DataFrame(dic2)
df2.set_index('A', inplace=True)

# 按axis=1合并df1和df2
df=pd.concat([df1,df2], axis=1)

# 加入带C列的df3并合并
dic3={'A':['1','2','3'], 'C':['20','21','22']}
df3=pd.DataFrame(dic3)
df3.set_index('A', inplace=True)
df4=pd.concat([df,df3], axis=1)

# 关键步骤:合并重复列
df4 = df4.groupby(df4.columns, axis=1).first()

print(df4)

运行结果

B     C
A         
1  10  20.0
2  11  21.0
3  12  22.0
4  10   NaN
5  11   NaN
6  12   NaN

原理说明

  • groupby(df4.columns, axis=1):把所有列按列名分组,相同列名的列会被分到同一组(比如两个B列会成为一组)。
  • .first():对每组的每行,提取第一个非空值。因为你的场景里同一索引下的重复列只有一个有值(另一个是NaN),这个操作正好把两列的有效值合并到单一列中。

扩展适配

如果你的重复列中存在同一索引下多列都有值的情况,可以根据业务需求替换first()为其他聚合函数:

  • 求和用sum()
  • 取平均值用mean()
  • 取最大值用max()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:02:31