Python 基于2个键列和1个值列将dataframe转换为具有嵌套字典的字典

Python 基于2个键列和1个值列将dataframe转换为具有嵌套字典的字典,python,pandas,dictionary,dataframe,Python,Pandas,Dictionary,Dataframe,我有一个熊猫数据框,如下所示: df = pd.DataFrame({'key1': ['abcd', 'defg', 'hijk', 'abcd'], 'key2': ['zxy', 'uvq', 'pqr', 'lkj'], 'value': [1, 2, 4, 5]}) 我正在尝试创建一个键为key1的字典和一个键为key2和value的嵌套字典。我尝试了以下方法: dct = df.groupby('key1'

我有一个熊猫数据框,如下所示:

df = pd.DataFrame({'key1': ['abcd', 'defg', 'hijk', 'abcd'],
                   'key2': ['zxy', 'uvq', 'pqr', 'lkj'],
                   'value': [1, 2, 4, 5]})
我正在尝试创建一个键为key1的字典和一个键为key2和value的嵌套字典。我尝试了以下方法:

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}}
使用,您可以构造
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}})
由于
defaultdict
dict
的子类,因此不需要进一步的工作