微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 多索引字典的词典

我有一个嵌套字典对象我想转换为多索引数据框,我该如何实现它.

例如.

t['a'] = dict()
t['b'] = dict()
t['a']['1'] = pd.DataFrame([ [1.0,2.0],[3.0,4.0] ])
t['a']['2'] = pd.DataFrame([ [5.0,6.0],[7.0,8.0] ])
t['b']['1'] = pd.DataFrame([ [1.0,2.0],[3.0,4.0] ])
t['b']['2'] = pd.DataFrame([ [5.0,6.0],[7.0,8.0] ])

所以我想转换为索引的一个数据框

a
   1        0      1  
      0    1.0    2.0 
      1    3.0    4.0
   2  
      0    5.0    6.0
      1    7.0    8.0
b
   1
      0    1.0    2.0
      1    3.0    4.0
   2
      0    5.0    6.0
      1    7.0    8.0

我想我可以使用MultiIndex(levels = [[‘a’,’b’],[1,2]])但我不知道如何构建标签.我也不知道如何将dict值作为数据数组传递.

解决方法:

我发现从元组列表中获取MultiIndex是最容易的,如here所述.

使用您的示例,我们有一个嵌套字典

In [25]: t
Out[25]: 
{'a': {'1':    0  1
0  1  2
1  3  4, '2':    0  1
0  5  6
1  7  8},
 'b': {'1':    0  1
0  1  2
1  3  4, '2':    0  1
0  5  6
1  7  8}}

如果你想让你的头部受到一点伤害,你可以使用这个列表理解:

In [50]: tuples = [(x, y, z) for x in t for y in t[x] for z in t[x][y]]

In [51]: tuples
Out[51]: 
[('a', '1', 0),
 ('a', '1', 1),
 ('a', '2', 0),
 ('a', '2', 1),
 ('b', '1', 0),
 ('b', '1', 1),
 ('b', '2', 0),
 ('b', '2', 1)]

然后idx = pd.MultiIndex.from_tuples(元组)将作为您的索引.

获取值解压缩是一项更多的工作.

编辑:你真的应该去看杰夫的答案,但为了完整性:

In [114]: df = pd.concat([x for z in t for x in t[z].values()])

In [115]: df.index = idx

In [118]: df
Out[118]: 
       0  1
a 1 0  1  2
    1  3  4
  2 0  5  6
    1  7  8
b 1 0  1  2
    1  3  4
  2 0  5  6
    1  7  8

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐