首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多索引系列转化为dict系列

将多索引系列转化为dict系列
EN

Stack Overflow用户
提问于 2018-02-19 08:00:07
回答 2查看 604关注 0票数 2

我有一个多索引系列,如下所示:

代码语言:javascript
复制
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

我想将其转换为一个索引系列,其中第二级索引现在是字典键,如下所示:

代码语言:javascript
复制
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}

我已经尝试过转换为dataframe,然后执行to_dict(),但是multiindex正在以tuple的形式返回。我想要做的就是能够将第一级索引和第二个索引解耦,所以任何帮助都是值得赞赏的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-19 08:06:56

系列

代码语言:javascript
复制
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

字典

代码语言:javascript
复制
{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'}}
票数 4
EN

Stack Overflow用户

发布于 2018-02-19 08:03:29

如果输入为Series

代码语言:javascript
复制
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函数结合使用zipdict

代码语言:javascript
复制
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()

或者:

代码语言:javascript
复制
d = df.groupby(level=0).apply(lambda x: dict(zip(x.index.get_level_values(1),x.C))).to_dict()
代码语言:javascript
复制
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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48861697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档