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

如何基于首个DataFrame的重复索引合并多个DataFrame?

解决重复索引DataFrame拼接报错问题

报错原因

你用pd.concat(..., join='inner')报错是因为join='inner'会基于索引值做对齐,但df1的重复索引和df2/3的唯一索引没法完成这种匹配——pandas不允许在重复索引上执行这类需要唯一索引的重索引操作。好在三个DataFrame行数完全一致,根本不需要按索引值对齐,按行的位置拼接就行。

两种可行方案

方案1:先按位置拼接,再恢复df1的重复索引

先把所有DataFrame的索引重置成默认整数,按列拼接后再把索引改回df1的重复索引:

# 重置索引后拼接,忽略原有索引的对齐逻辑
temp_df = pd.concat([
    df1.reset_index(drop=True),
    df2.reset_index(drop=True),
    df3.reset_index(drop=True)
], axis=1)
# 恢复df1的重复索引
final_df = temp_df.set_index(df1.index)

方案2:直接替换df2、df3的索引后拼接

既然要保留df1的索引,直接把df2和df3的索引改成和df1一模一样,再正常concat就行:

# 替换df2、df3的索引为df1的重复索引
df2.index = df1.index
df3.index = df1.index
# 直接按列拼接,无需指定join参数(默认outer,这里因为索引完全一致,结果和inner一样)
final_df = pd.concat([df1, df2, df3], axis=1)

注意点

  • 两种方案都能保留df1的重复索引特性,且不会触发索引相关报错
  • 因为三个DataFrame行数一致,所以按位置/索引替换的方式完全安全,不会出现数据错位的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:27:47