具有MultiIndex的DataFrame来决定 [英] DataFrame with MultiIndex to dict
问题描述
我有一个具有MultiIndex的数据框.我想知道我是否以正确的方式创建了数据框(见下文).
I have a dataframe with a MultiIndex. I am wondering whether I created the data frame in the correct manner (see below).
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转换成字典,以便第一个dict键是['bar','baz','foo','qux']中的一个,值是日期和内部字典由"total1"和"totals2"作为键组成,值是df的整数. 另一种解释是,例如,如果dict1是dict,然后调用:
I am ultimately looking to transform the df into a dict of dictionaries such that the first dict key are one of ['bar','baz', 'foo','qux'] and values are the dates and the inner dictionary is made of 'total1' and 'totals2' as key and the values are the integers of the df. Alternative explanation, is for example if dict1 is the dict then calling:
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} } }
要实现此目标,我需要如何更改?这是索引问题吗?
How and what would I need to alter in order to achieve this? Is this an indexing issue?
推荐答案
要将整个数据帧转换为字典,请尝试:
For converting whole dataframe to dictionary Try:
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}}}
要转换一个特定的列,请先选择它,然后将其转换为字典
For converting one particular column, select before converting it to dictionary i.e
df.groupby(level=0).apply(lambda df: df.xs(df.name)[colname].to_dict()).to_dict()
这篇关于具有MultiIndex的DataFrame来决定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!