【问题标题】:Converting a multindex dataframe to a nested dictionary [closed]将多索引数据框转换为嵌套字典 [关闭]
【发布时间】:2021-01-05 16:44:51
【问题描述】:

我有一个分组数据框,如下链接所示:

我想将其转换为nested dictionary,其中'Dia' 是主键,其中包含另一个字典,其中键是'mac_ap',值是另一个字典,其中键是'download''upload' 和值将是列'bytes' 的对应值

类似这样的:

【问题讨论】:

  • 您应该使用 2 个字典,它们将通过 mac_ap 值链接在一起。一个会将日期与 mac_ap 值相关联,另一个将在其中获取某个 mac_ap 键的发送和接收值。
  • 你会如何推荐我这样做?
  • 建立2个字典; 1 以日期为键,mac 列表为值,另一个以 mac 为键,接收和发送的字节列表为值。

标签: python pandas dataframe data-science multi-index


【解决方案1】:

假设这是您的数据框:

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

【讨论】:

    猜你喜欢
    • 2018-06-03
    • 2020-07-31
    • 2017-03-24
    • 2018-08-14
    • 2022-01-25
    • 2014-05-10
    • 1970-01-01
    • 2022-07-01
    相关资源
    最近更新 更多