如何合并索引不完全相同的多个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
相关产品推荐
相关产品推荐

