我有一个看起来像这样的Multiindex系列:
a 1 value_1
2 value_2
3 value_3
b 2 value_4
4 value_5
5 value_6
c 1 value_7
5 value_8
9 value_9
我想将它转换为单个索引系列,其中第二级索引现在是字典键,如下所示:
a {1: value_1, 2: value_2, 3: value_3}
b {2: value_4, 4: value_5, 5: value_6}
c {1: value_7, 5: value_8, 9: value_9}
我尝试过转换为数据帧然后执行to_dict(),但是多索引作为元组返回。我想要做的就是能够将第一级索引与第二级索引分离 - 所以任何帮助也是如此。
答案 0 :(得分:3)
如果输入为Series
:
s = pd.Series({('c', 9): 'value_9', ('c', 1): 'value_7', ('b', 2): 'value_4',
('a', 1): 'value_1', ('c', 5): 'value_8', ('a', 2): 'value_2',
('b', 4): 'value_5', ('a', 3): 'value_3', ('b', 5): 'value_6'})
print (s)
a 1 value_1
2 value_2
3 value_3
b 2 value_4
4 value_5
5 value_6
c 1 value_7
5 value_8
9 value_9
dtype: object
s1 = (s.to_frame('D')
.groupby(level=0)
.apply(lambda x: dict(zip(x.index.get_level_values(1), x.D))))
print (s1)
a {1: 'value_1', 2: 'value_2', 3: 'value_3'}
b {2: 'value_4', 4: 'value_5', 5: 'value_6'}
c {1: 'value_7', 5: 'value_8', 9: 'value_9'}
dtype: object
s = s.reset_index(level=1).groupby(level=0).apply(lambda x: dict(zip(x['level_1'], x[0])))
print (s)
a {1: 'value_1', 2: 'value_2', 3: 'value_3'}
b {2: 'value_4', 4: 'value_5', 5: 'value_6'}
c {1: 'value_7', 5: 'value_8', 9: 'value_9'}
dtype: object
将groupby
与自定义lambda
功能一起使用zip
和dict
:
print (df)
C
A B
a 1 value_1
2 value_2
3 value_3
b 2 value_4
4 value_5
5 value_6
c 1 value_7
5 value_8
9 value_9
d = df.reset_index(level=1).groupby(level=0).apply(lambda x: dict(zip(x.B, x.C))).to_dict()
或者:
d = df.groupby(level=0).apply(lambda x: dict(zip(x.index.get_level_values(1),x.C))).to_dict()
print (d)
{'a': {1: 'value_1', 2: 'value_2', 3: 'value_3'},
'c': {1: 'value_7', 5: 'value_8', 9: 'value_9'},
'b': {2: 'value_4', 4: 'value_5', 5: 'value_6'}}
输出Series
省略最后to_dict
。
答案 1 :(得分:3)
系列
pd.Series({k: v[k].to_dict() for k, v in s.groupby(level=0)})
a {1: 'value_1', 2: 'value_2', 3: 'value_3'}
b {2: 'value_4', 4: 'value_5', 5: 'value_6'}
c {1: 'value_7', 5: 'value_8', 9: 'value_9'}
dtype: object
词典
{k: v[k].to_dict() for k, v in s.groupby(level=0)}
{'a': {1: 'value_1', 2: 'value_2', 3: 'value_3'},
'b': {2: 'value_4', 4: 'value_5', 5: 'value_6'},
'c': {1: 'value_7', 5: 'value_8', 9: 'value_9'}}