【问题标题】:Convert pandas multiindex dataframe to nested dictionary将 pandas 多索引数据框转换为嵌套字典
【发布时间】:2018-06-03 20:59:50
【问题描述】:

我有一个 pandas 多索引数据框,我试图将其输出为嵌套字典。

# create the dataset
data = {'clump_thickness': {(0, 0): 274.0, (0, 1): 19.0, (1, 0): 67.0, (1, 1): 12.0, (2, 0): 83.0, (2, 1): 45.0, (3, 0): 16.0, (3, 1): 40.0, (4, 0): 4.0, (4, 1): 54.0, (5, 0): 0.0, (5, 1): 69.0, (6, 0): 0.0, (6, 1): 0.0, (7, 0): 0.0, (7, 1): 0.0, (8, 0): 0.0, (8, 1): 0.0, (9, 0): 0.0, (9, 1): 0.0}}
df = pd.DataFrame(data)
df.head()
#      clump_thickness
# 0 0            274.0
#   1             19.0
# 1 0             67.0
#   1             12.0
# 2 0             83.0

df 是我想作为嵌套字典输出的数据框。我正在寻找的输出格式为 -

{"0":
{
  "0":274,
  "1":19
},
"1":{
  "0":67,
  "1":12
},
"2":{
  "0":83,
  "1":45
},
"3":{
  "0":16,
  "1":40
},
"4":{
  "0":4,
  "1":54
},
"5":{
  "0":0,
  "1":69
}
}

这里的第一个索引构成了最外层字典的键。对于每个键,我们存储了一个字典,其键是第二个索引中的值。

当我执行df.to_dict() 时,多索引不是嵌套,而是作为元组返回。我如何做到这一点?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    对我来说工作:

    d = {l: df.xs(l)['clump_thickness'].to_dict() for l in df.index.levels[0]}
    

    另一个类似于DataFrame with MultiIndex to dict 的解决方案,但对于Series 来说是必要的过滤列:

    d = df.groupby(level=0).apply(lambda df: df.xs(df.name).clump_thickness.to_dict()).to_dict()
    
    print (d)
    
    {0: {0: 274.0, 1: 19.0},
     1: {0: 67.0, 1: 12.0},
     2: {0: 83.0, 1: 45.0},
     3: {0: 16.0, 1: 40.0},
     4: {0: 4.0, 1: 54.0},
     5: {0: 0.0, 1: 69.0},
     6: {0: 0.0, 1: 0.0},
     7: {0: 0.0, 1: 0.0},
     8: {0: 0.0, 1: 0.0},
     9: {0: 0.0, 1: 0.0}}
    

    【讨论】:

    • 但不一样,这是Series,还有DataFrame :(
    • 另一种解决方案让人觉得它是个骗子,最好链接答案
    • 您如何为系列而不是数据框执行此操作?
    • @Mingo 如果df是系列,只省略['clump_thickness']
    【解决方案2】:
    df.unstack().clump_thickness.apply(lambda x: x.to_dict(), axis=1).to_dict()
    

    【讨论】:

      猜你喜欢
      • 2017-03-24
      • 2020-07-31
      • 1970-01-01
      • 2021-11-28
      • 2022-01-07
      • 2015-10-06
      • 2021-12-21
      • 2018-08-14
      • 2021-06-30
      相关资源
      最近更新 更多