python - 用于字典和保存数据的多索引数据框

标签 python pandas

我的需要是将以下数据框转换为如下所示的字典并保留数据。

<表类=“s-表”> <标题> 姓名 名字 年龄 地区 国家 <正文> 杜邦 吉恩 33 欧洲 法国 PEPIN 雅克 42 欧洲 法国 马丁 埃里克 32 欧洲 阿莱磁 舒马赫 菲利普 35 亚洲 中国 ...
{ '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/

相关文章:

python - Matplotlib 和 Ipython 笔记本 : Displaying exactly the figure that will be saved

python - 如何在 Windows 10 64 位上安装 pygraphviz

python - 从目录中读取所有文本文件

Python,tkinter,在同一子图中绘制 3 个堆叠分组直方图

python - 使用 DataFrame 索引日期创建日期列

python - 按列中的值对数据框进行采样并保留所有行

python - 如何编写一个正则表达式来匹配一个字符串文字,其中转义是引号字符的两倍?

python - 仅从数据框中提取今天日期的行

python - 如何根据多列中定义的值比例重新平衡数据集?

python - 如何拆分整个pandas DataFrame以列出并选择第n个元素