【问题标题】:Convert pandas dataframe to dictionary with nested dictionary based on 2 key columns and 1 value column使用基于 2 个键列和 1 个值列的嵌套字典将 pandas 数据帧转换为字典
【发布时间】:2019-01-14 06:10:15
【问题描述】:

我在 pandas 中有一个如下的数据框:

df = pd.DataFrame({'key1': ['abcd', 'defg', 'hijk', 'abcd'],
                   'key2': ['zxy', 'uvq', 'pqr', 'lkj'],
                   'value': [1, 2, 4, 5]})

我正在尝试使用 key1 的键和 key2 和值的嵌套字典创建一个字典。我尝试了以下方法:

dct = df.groupby('key1')[['key2', 'value']].apply(lambda x: x.set_index('key2').to_dict(orient='index')).to_dict()

dct

{'abcd': {'zxy': {'value': 1}, 'lkj': {'value': 5}},
 'defg': {'uvq': {'value': 2}},
 'hijk': {'pqr': {'value': 4}}}

期望的输出:

{'abcd': {'zxy': 1, 'lkj': 5}, 'defg': {'uvq': 2}, 'hijk': {'pqr': 4}}

【问题讨论】:

    标签: python pandas dictionary dataframe


    【解决方案1】:

    使用collections.defaultdict,您可以构造dict 对象的defaultdict 并在迭代数据框时添加元素:

    from collections import defaultdict
    
    d = defaultdict(dict)
    
    for row in df.itertuples(index=False):
        d[row.key1][row.key2] = row.value
    
    print(d)
    
    defaultdict(dict,
                {'abcd': {'lkj': 5, 'zxy': 1},
                 'defg': {'uvq': 2},
                 'hijk': {'pqr': 4}})
    

    由于defaultdictdict 的子类,这应该不需要进一步的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-20
      • 2020-06-11
      • 2020-11-11
      • 2020-11-28
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多