假设这是您的数据框:
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()
您首先在'Dia' 上使用groupby,然后在嵌套的'macap' 上应用另一个groupby。最后一个 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}}}