将 pandas 数据框从多列导出到嵌套字典

数据挖掘 Python 熊猫 数据框
2021-10-07 00:58:00

这是一个类似的问题

通过组合多个行值将 pandas 导出到字典

但在这种情况下,我想要一些不同的东西。

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'])

我希望输出为:

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

2个回答

将 dict 理解与嵌套 groupby 一起使用:

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]}}

这有点复杂,但也许有人有更好的解决方案。与此同时,我们开始:

df = df.groupby(['subgroup']).agg({'selectedCol': list, 'maingroup': 'first'})
df = df.groupby(['maingroup']).agg(dict)
df.to_json(orient='columns')

我分两步做:

  • 首先合并 selectedCol 得到一个列表:

在此处输入图像描述

  • 然后创建第二级字典

在此处输入图像描述

  • 提取到json

在此处输入图像描述

通过使用 to_json 方法中的 orient 参数可能有更聪明的方法来做到这一点。

编辑:代码的哪一部分失败了?1、2 还是 3?我的笔记本截图。检查你的版本:

在此处输入图像描述

或者试试这个:

df.groupby(['subgroup']).agg({'selectedCol': list, 'maingroup': 'first'}).groupby(['maingroup']).agg(dict)