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

如何用Pandas从多个DataFrame创建指定结构的多级索引DataFrame

问题

现有两个结构完全一致的Pandas DataFrame:df1和df2,二者行索引都是['t1','t2','t3'],列名都是['A','B']。想要快速生成一个多级索引的DataFrame df3,要求它的多级行索引是['t1','t2','t3'](一级)和['A','B'](二级),列名为['df1','df2'],而且不用pd.MultiIndex这类复杂方法手动构建索引。

相关代码示例如下:

import pandas as pd

l1 = [[1,2], [3,4], [5,6]]
l2 = [[10,20], [30, 40], [50, 60]]

df1 = pd.DataFrame(l1)
df2 = pd.DataFrame(l2)

df1.index = ["t1", "t2", "t3"]
df2.index = ["t1", "t2", "t3"]
df1.columns = ["A", "B"]
df2.columns = ["A", "B"]

# df1的输出
print(df1)
#     A  B
# t1  1  2
# t2  3  4
# t3  5  6

# df2的输出
print(df2)
#      A   B
# t1  10  20
# t2  30  40
# t3  50  60

# 期望得到的df3结构
print(df3)
#       df1 df2
# t1
#    A  1   10
#    B  2   20
# t2
#    A  3   30
#    B  4   40
# t3
#    A  5   50
#    B  6   60
解决方案

直接用stack()和pd.concat组合就能搞定,全程不用手动创建多级索引:

一行代码实现

df3 = pd.concat([df1.stack(), df2.stack()], axis=1, keys=['df1', 'df2'])

原理说明

  • df1.stack()会把原DataFrame的列名(A、B)转成二级行索引,保留原行索引(t1、t2、t3)作为一级索引,自动生成我们需要的多级索引结构;
  • pd.concat按列合并两个经过stack()处理的Series,通过keys参数指定新列名df1和df2,直接得到目标结构的DataFrame。

运行后输出的df3就和预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:24:29