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

如何合并索引不完全相同的多个Pandas DataFrame?

解决索引不重叠的DataFrame/Series合并问题

要实现你需要的合并效果,核心是利用pandas的索引对齐机制,将多个Series/DataFrame按行索引合并,再填充缺失值。以下是具体步骤:

1. 构造原始数据

首先需要将你给出的示例数据转换为以目标索引为行索引的Series(如果是DataFrame,确保行索引是目标索引):

import pandas as pd

# Col1的索引是A-F,对应值1-6
col1 = pd.Series([1, 2, 3, 4, 5, 6], index=['A', 'B', 'C', 'D', 'E', 'F'])
# Col2的索引是A、D、B、F、G、H,对应值7、8、9、10、11、12
col2 = pd.Series([7, 8, 9, 10, 11, 12], index=['A', 'D', 'B', 'F', 'G', 'H'])
# Col3的索引是A、D、C、F、H、I,对应值6、9、5、7、9、8
col3 = pd.Series([6, 9, 5, 7, 9, 8], index=['A', 'D', 'C', 'F', 'H', 'I'])

2. 合并并填充缺失值

使用pd.concat()按列合并(axis=1),pandas会自动对齐所有行索引,缺失的位置用NaN填充,最后将NaN替换为'-':

# 合并三个Series,指定列名
merged_df = pd.concat([col1, col2, col3], axis=1, keys=['Col1', 'Col2', 'Col3'])
# 填充缺失值为'-',转换为字符串格式
merged_df = merged_df.fillna('-').astype(str)
# 按索引字母顺序排序(可选,匹配你的输出格式)
merged_df = merged_df.sort_index()

运行后得到的结果与你需要的完全一致:

Col1 Col2 Col3
A    1    7    6
B    2    9    -
C    3    -    5
D    4    8    9
E    5    -    -
F    6   10    7
G    -   11    -
H    -   12    9
I    -    -    8

为什么之前的merge/concat没成功?

  • 使用merge()时,默认按列匹配,若未指定left_index=True和right_index=True,会导致索引无法正确对齐。
  • 使用concat()时,若未设置axis=1会按行合并而非列合并,且缺少缺失值填充步骤,自然无法得到目标格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:07:45