【问题标题】:Export pandas dataframe to a nested dictionary from multiple columns将 pandas 数据框从多列导出到嵌套字典
【发布时间】:2020-05-21 11:35:38
【问题描述】:

this here类似的问题

但在这种情况下,我想要一些不同的东西。 我有下一个数据框示例:

from pandas import DataFrame

df = DataFrame([
           ['A', 123, 1], 
           ['B', 345, 5], 
           ['C', 712, 4],
           ['B', 768, 2], 
           ['B', 768, 3], 
           ['A', 123, 9], 
           ['C', 178, 6], 
           ['C', 178, 5],  
           ['A', 321, 3]], 
           columns=['maingroup', 'subgroup', 'selectedCol'])

我想提取一个嵌套字典,其中主键对应于'maingroup' 中的唯一名称,子键对应于'subgroup' 的唯一名称,值存储来自'selectedCol' 的值数组'maingroup''subgroup' 键,像这样:

{
 'A': {'123':[1, 9], '321':[3]},
 'B': {'345':[5], '768':[2, 3]},
 'C': {'712':[4], '178':[6, 5]}
}

【问题讨论】:

    标签: python pandas dataframe dictionary


    【解决方案1】:

    在嵌套 groupby 中使用 dict 理解:

    d = {k: f.groupby('subgroup')['selectedCol'].apply(list).to_dict()
         for k, f in df.groupby('maingroup')}
    

    [出]

    {'A': {123: [1, 9], 321: [3]},
     'B': {345: [5], 768: [2, 3]},
     'C': {178: [6, 5], 712: [4]}}
    

    【讨论】:

      【解决方案2】:

      创建MultiIndex Series,然后在字典理解中嵌套dicts:

      s = df.groupby(['maingroup','subgroup'], sort=False)['selectedCol'].apply(list)
      d = {l: s.xs(l).to_dict() for l in s.index.levels[0]}
      print (d)
      {'A': {123: [1, 9], 321: [3]}, 
       'B': {345: [5], 768: [2, 3]}, 
       'C': {712: [4], 178: [6, 5]}}
      

      【讨论】:

      • 这也有效,但我会接受以前的答案,因为它更简单、更透明。谢谢!
      • 我的测试中没有太多...只有
      • 仅 3 - 将样本 df 连接 10,000 次
      • 我有一个 2000 行的数据帧,时间差是十分之一毫秒……正好 0.4 毫秒
      • @acb - 唯一组的数量是多少? print (df['maingroup'].nunique()) ?
      猜你喜欢
      • 2015-07-24
      • 1970-01-01
      • 2022-06-13
      • 2022-01-10
      • 1970-01-01
      • 2018-06-03
      • 2021-11-28
      • 2022-01-07
      • 2021-03-20
      相关资源
      最近更新 更多