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

如何将三层嵌套字典转为指定多级表头的Pandas DataFrame

三层嵌套字典转指定多级表头Pandas DataFrame方案

直接用以下代码即可生成完全匹配要求格式的DataFrame:

import pandas as pd

# 原始三层嵌套数据,注意不要用dict做变量名,会覆盖Python内置类型
source_data = {'A1' : {'B1' : {'Average' : 0 , 'Max' : 0, 'Min' : 0},
                'B2' : {'Average' : 0 , 'Max' : 0, 'Min' : 0},
                'B3' : {'Average' : 0 , 'Max' : 0, 'Min' : 0}},
        'A2' : {'B1' : {'Average' : 0 , 'Max' : 0, 'Min' : 0},
                'B2' : {'Average' : 0 , 'Max' : 0, 'Min' : 0},
                'B3' : {'Average' : 0 , 'Max' : 0, 'Min' : 0}}}

# 第一步:以最外层字典键为行索引生成初始DataFrame
df = pd.DataFrame.from_dict(source_data, orient='index')
# 第二步:拆分单元格内的字典为二级列结构
df = df.apply(pd.Series).stack().unstack(level=-1)
# 第三步:交换列层级,把B1/B2/B3调整为第一级表头
df.columns = df.columns.swaplevel(0, 1)
# 第四步:排序固定列顺序,避免表头乱序
df = df.sort_index(axis=1, level=[0, 1])
# 第五步:设置行索引名称为Region
df.index.name = 'Region'

运行后打印df可得到完全匹配预期的结果:

B1               B2               B3          
          Average Max Min Average Max Min Average Max Min
Region                                                    
A1              0   0   0       0   0   0       0   0   0
A2              0   0   0       0   0   0       0   0   0

关键实现说明

  • 直接调用pd.DataFrame(source_data)会默认把最外层A1/A2识别为列,和需求的行索引要求相反,必须指定orient='index'参数
  • 初始转换后生成的二级列表头顺序是「统计指标-B类标签」,和需求的顺序相反,用swaplevel(0,1)即可快速交换两级表头的位置
  • 最后调用sort_index是为了固定列顺序,保证B1/B2/B3按序排列,每个B分组下的Average/Max/Min字段也保持统一顺序,不会出现乱序问题

内容的提问来源于stack exchange,提问作者Galo Torres Sevilla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:15:41