如何在Pandas中合并普通列与多层索引列的DataFrame
解决多层索引与普通列DataFrame横向合并丢失列名的问题
核心思路
问题根源在于三个DataFrame的列索引层级不一致(df1单层、df2两层、df3三层),导致pd.concat(axis=1)无法正确对齐列名。解决方法是统一所有DataFrame的列索引层级,再执行合并操作。
具体步骤与代码
1. 构建示例数据(模拟你的场景)
import pandas as pd # 普通列结构的df1 df1 = pd.DataFrame({'A': [10, 20], 'B': [11, 21]}) # 两层索引列的df2 df2 = pd.DataFrame({'C': [5, 30], 'D': [6, 9]}) df2.columns = pd.MultiIndex.from_tuples([('X', 'C'), ('X', 'D')]) # 三层索引列的df3 df3 = pd.DataFrame({'Q': [10, 20], 'R': [11, 21]}) df3.columns = pd.MultiIndex.from_tuples([('Y', 'J', 'Q'), ('Y', 'K', 'R')])
2. 统一所有列索引为最高层级(三层)
对层级不足的DataFrame,用空字符串填充缺失的索引层级:
# 处理df1:单层 → 三层(前两层补空) df1.columns = pd.MultiIndex.from_tuples([('', '', col) for col in df1.columns]) # 处理df2:两层 → 三层(第三层补空) df2.columns = pd.MultiIndex.from_tuples([(level0, level1, '') for level0, level1 in df2.columns])
3. 横向合并并导出到Excel
# 合并三个DataFrame merged_df = pd.concat([df1, df2, df3], axis=1) # 导出到Excel(保留完整层级列名) merged_df.to_excel('merged_result.xlsx', header=True, index=False)
效果说明
合并后的DataFrame会完整保留所有列的层级结构:
- df1的
A/B列对应三层索引('', '', 'A')/('', '', 'B') - df2的
X→C/X→D对应('X', 'C', '')/('X', 'D', '') - df3的
Y→J→Q/Y→K→R保持原三层索引
导出到Excel后,表头会自动展示多层级结构,不会丢失任何列名信息。
内容的提问来源于stack exchange,提问作者bacca
相关产品推荐
相关产品推荐

