我的需要是将以下数据框转换为如下所示的字典并保留数据。
{ 'EUROPE' : { 'FRANCE' : [ ( 'DUPONT', 'Jean', '33' ) , ('PEPIN', 'Jacques', '42') ], 'ALLEMAGNE': [ ( 'MARTIN', 'Eric', '32' ) ] }, 'ASIA' : { 'CHINA' : [ ('SCHUMACHER', 'Philippe', '35') ] } }
以地区作为第一个主键的字典,以国家/地区作为主字典的另一个键的第二个字典。
不知道可不可以!
我尝试过这个功能:
df_dic = dict([(i, [(x, [y, z])]) for i, x, y, z in zip(df['Region'], df['Country'], df['Name'], df['Firstname'], df['Age'])])
但它返回
{ 'EUROPE' : [ ( 'ALLEMAGNE': [ 'MARTIN', 'Eric', '32' ] ) ] , 'ASIA' : [ ( 'CHINA' : [ 'SCHUMACHER', 'Philippe', '35' ] ) ] }
我丢失了 2 行,并且第二个关键国家/地区没有作为第二个字典实现到第一个字典中。
最佳答案
您可以使用字典理解 groupby
:
out = {k: {k2: list(map(tuple, g2.to_numpy()))
for k2, g2 in g.groupby(level='Country', sort=False)}
for k, g in df.set_index(['Region', 'Country'])
.groupby(level='Region', sort=False)
}
或者,最有效的方法是使用您最初尝试过的经典 python 循环,但使用 dict.setdefault
:
out = {}
for region, country, *info in zip(df['Region'], df['Country'], df['Name'], df['Firstname'], df['Age']):
out.setdefault(region, {}).setdefault(country, []).append(tuple(info))
输出:
{'EUROPE': {'FRANCE': [('DUPONT', 'Jean', 33), ('PEPIN', 'Jacques', 42)],
'ALLEMAGNE': [('MARTIN', 'Eric', 32)]},
'ASIA': {'CHINA': [('SCHUMACHER', 'Philippe', 35)]}}
关于python - 用于字典和保存数据的多索引数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76635215/