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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 18:40:57