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

如何优雅地从数据字典与索引层级字典构建MultiIndex DataFrame

问题描述

想要构建如下的DataFrame:

A  B
x y      
a 1  2  1
  2  6  3
c 2  7  2

现有两个可用字典:

data = {'A': [2,6,7],
        'B': [1,3,2]}

index = {'x': ['a', 'a', 'c'],
         'y': [1, 2, 2]}

尝试使用dfm = pd.DataFrame.from_records(data=data, index=index)时出现索引大小错误(应为3却得到2)。已知可以通过将索引字典转为数组列表构建MultiIndex的方法实现:

labels = [['a', 'a', 'c'], [1, 2, 2]]
mi = pd.MultiIndex.from_arrays(labels, names=['x','y'])
dfm = pd.DataFrame(data, index=mi)

但认为该方法不够优雅,希望找到更优实现方式。

更优雅的实现方法

提供两种直接复用现有索引字典的简洁方案:

方法1:利用MultiIndex.from_frame

将索引字典转为DataFrame后,直接生成多级索引:

import pandas as pd

data = {'A': [2,6,7],
        'B': [1,3,2]}
index_dict = {'x': ['a', 'a', 'c'],
              'y': [1, 2, 2]}

mi = pd.MultiIndex.from_frame(pd.DataFrame(index_dict))
dfm = pd.DataFrame(data, index=mi)

方法2:创建DataFrame后直接设置多级索引

合并数据字典与索引字典,创建DataFrame后一键设置多级索引,代码更紧凑:

import pandas as pd

data = {'A': [2,6,7],
        'B': [1,3,2]}
index_dict = {'x': ['a', 'a', 'c'],
              'y': [1, 2, 2]}

dfm = pd.DataFrame({**data, **index_dict}).set_index(['x', 'y'])

这两种方法无需手动提取索引列表,完全复用原有的索引字典结构,代码可读性和简洁性更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 14:02:39