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

pandas合并同列名DataFrame后创建多级列索引的简便方案

你完全可以在concat操作阶段直接实现需求,不需要后续单独修改列索引。

错误原因说明

你之前的写法报错是因为:c是已经拼接完成的DataFrame,列长度为4,用pd.MultiIndex.from_product([c.columns, ['FOO', 'BAR']])会生成4*2=8个索引项,和实际列的长度不匹配,自然抛出长度不匹配的错误。

最优实现方案

直接使用pd.concat自带的keys参数,给两个子DataFrame指定上层列索引名即可:

#!/usr/bin/env python3
import pandas as pd

a = pd.DataFrame({'X': [1,2], 'Y': [3, 4]})
b = pd.DataFrame({'X': [9,8], 'Y': [7, 6]})

# 拼接时直接传入keys生成多级列索引
c = pd.concat([a, b], axis=1, keys=['FOO', 'BAR'])

运行后得到的c的列结构和你预期完全一致,列索引结构如下:

MultiIndex([('FOO', 'X'),
            ('FOO', 'Y'),
            ('BAR', 'X'),
            ('BAR', 'Y')],
           )

提前处理单个DataFrame的方案

如果你确实需要在拼接前先处理两个单独的DataFrame,也可以分别给每个DataFrame设置多级列索引后再拼接:

import pandas as pd

a = pd.DataFrame({'X': [1,2], 'Y': [3, 4]})
b = pd.DataFrame({'X': [9,8], 'Y': [7, 6]})

# 给a添加上层索引FOO
a.columns = pd.MultiIndex.from_product([['FOO'], a.columns])
# 给b添加上层索引BAR
b.columns = pd.MultiIndex.from_product([['BAR'], b.columns])

c = pd.concat([a, b], axis=1)

该方案和直接使用keys参数的效果完全相同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:06:05