python - 将多索引数据框转换为嵌套字典
问题描述
我有一个分组数据框,如此链接所示:
我想将它转换为 a nested dictionary
,'Dia'
主键在哪里,里面包含另一个字典,其中键是'mac_ap'
,值是另一个字典,键是'download'
,'upload'
值是列的对应值'bytes'
像这样的东西:
解决方案
假设这是您的数据框:
df = pd.DataFrame([['2010-12-06', 'MAC_AP_1', 'download', 1],
['2010-12-06', 'MAC_AP_1', 'upload', 2],
['2010-12-06', 'MAC_AP_2', 'download', 3],
['2010-12-06', 'MAC_AP_2', 'upload', 4],
['2020-01-01', 'MAC_AP_3', 'download', 5],
['2020-01-01', 'MAC_AP_3', 'upload', 6],
['2020-01-01', 'MAC_AP_4', 'download', 7],
['2020-01-01', 'MAC_AP_4', 'upload', 8]]
, columns=['Dia', 'macap', 'transmission', 'bytes'])
Dia macap transmission bytes
0 2010-12-06 MAC_AP_1 download 1
1 2010-12-06 MAC_AP_1 upload 2
2 2010-12-06 MAC_AP_2 download 3
3 2010-12-06 MAC_AP_2 upload 4
4 2020-01-01 MAC_AP_3 download 5
5 2020-01-01 MAC_AP_3 upload 6
6 2020-01-01 MAC_AP_4 download 7
7 2020-01-01 MAC_AP_4 upload
您需要从数据框中创建一个嵌套字典。因此,您应该递归地按数据框列分组,直到到达分支:
d = df.groupby('Dia').apply(lambda a: dict(a.groupby('macap').apply(lambda x: dict(zip(x['transmission'], x['bytes'])))))
d = d.to_dict()
您首先groupby
在'Dia'
嵌套groupby
的'macap'
. 最后一个 apply 用于使传输和字节成为一个元组,然后将它们转换为字典。
由于您有 3 级嵌套字典,因此您可以在代码中看到也有 3 次字典转换。
结果将是这样的:
{'2010-12-06': {'MAC_AP_1': {'download': 1, 'upload': 2},
'MAC_AP_2': {'download': 3, 'upload': 4}},
'2020-01-01': {'MAC_AP_3': {'download': 5, 'upload': 6},
'MAC_AP_4': {'download': 7, 'upload': 8}}}
推荐阅读
- c# - 如何创建第一个 Windows 窗体 DevExpress 应用程序
- sql - Excel 查询表的格式问题
- java - 返回页面
在 Spring 数据 JPA 中为空 - java - Spring Boot 2 和 GraphQL 不兼容
- assembly - GDB,asm:如何用内存地址命名别名
- jquery - 从表中获取一行
- socketcluster - 如何使用 SSL 设置 socketcluster
- python - tensorflow:如何从特征字典中动态选择张量
- freemarker - Freemarker 在我的 fo:table-body 之外动态引用标签
- r - 如何在 R 中使用 hh:mm:ss:00 格式获取两个整数变量的差异