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
的子类,因此不需要进一步的工作