如何优雅地从数据字典与索引层级字典构建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
相关产品推荐
相关产品推荐

