gpt4 book ai didi

python - 带有 MultiIndex 的 DataFrame

转载 作者:太空狗 更新时间:2023-10-29 20:16:38 27 4
gpt4 key购买 nike

我有一个带有 MultiIndex 的数据框。我想知道我是否以正确的方式创建了数据框(见下文)。

             01.01  02.01  03.01  04.01
bar total1 40 52 18 11
total2 36 85 5 92
baz total1 23 39 45 70
total2 50 49 51 65
foo total1 23 97 17 97
total2 64 56 94 45
qux total1 13 73 38 4
total2 80 8 61 50

df.index.values 结果:

array([('bar', 'total1'), ('bar', 'total2'), ('baz', 'total1'),
('baz', 'total2'), ('foo', 'total1'), ('foo', 'total2'),
('qux', 'total1'), ('qux', 'total2')], dtype=object)

df.index.get_level_values 结果:

<bound method MultiIndex.get_level_values of MultiIndex(levels=[[u'bar', u'baz', u'foo', u'qux'], [u'total1', u'total2']],
labels=[[0, 0, 1, 1, 2, 2, 3, 3], [0, 1, 0, 1, 0, 1, 0, 1]],names=[]

我最终希望将 df 转换为字典字典,这样第一个字典键是 ['bar','baz', 'foo','qux'] 之一,值是日期和内部字典由'total1'和'totals2'作为键组成,值是df的整数。替代解释,例如,如果 dict1 是字典,则调用:

dict1['bar']

将导致输出:

{u'bar':{'01.01':{'total1':40,'total2':36},'02.01':{'total1':52,'total2':85},'03.01':{'total1':18,'total2':5},'04.01':{'total1':11,'total2':92} } }

为了实现这一目标,我需要如何改变以及需要改变什么?这是索引问题吗?

最佳答案

将整个数据框转换为字典尝试:

df.groupby(level=0).apply(lambda df: df.xs(df.name).to_dict()).to_dict()

{'bar': {'01.01': {'total1': 40, 'total2': 36},
'02.01': {'total1': 52, 'total2': 85},
'03.01': {'total1': 18, 'total2': 5},
'04.01': {'total1': 11, 'total2': 92}},
'baz': {'01.01': {'total1': 23, 'total2': 50},
'02.01': {'total1': 39, 'total2': 49},
'03.01': {'total1': 45, 'total2': 51},
'04.01': {'total1': 70, 'total2': 65}},
'foo': {'01.01': {'total1': 23, 'total2': 64},
'02.01': {'total1': 97, 'total2': 56},
'03.01': {'total1': 17, 'total2': 94},
'04.01': {'total1': 97, 'total2': 45}},
'qux': {'01.01': {'total1': 13, 'total2': 80},
'02.01': {'total1': 73, 'total2': 8},
'03.01': {'total1': 38, 'total2': 61},
'04.01': {'total1': 4, 'total2': 50}}}

要转换一个特定的列,请在将其转换为字典之前选择,即

df.groupby(level=0).apply(lambda df: df.xs(df.name)[colname].to_dict()).to_dict()

关于python - 带有 MultiIndex 的 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39067831/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com