我已经创建了一个最小的嵌套pandas的例子,根据这post中给出的说明,从一个嵌套字典.

nested_dict = { 'Full_Grades': {
    'Science_Marks': {
        'Physics': {
            'Theo': 99,
            'Prac': 100
        },
        'Biology': {
            'Theo': 89,
            'Prac': 100
        }
    },
    'Finance_Marks': {
        'Economics': {
            'Theo': 99,
            'Prac': 100
        },
        'Accounting': {
            'Theo': 89,
            'Prac': 100
        }
    }
    }
}
import pandas as pd
out = pd.concat({k: pd.concat({k2: pd.DataFrame(v2) for k2,v2 in v.items()}, axis = 1)
                  for k, v in nested_dict.items()}, axis = 1) .unstack().to_frame().T
print(out)

这是输出—

    Full_Grades Full_Grades Full_Grades Full_Grades Full_Grades Full_Grades Full_Grades Full_Grades
    Science_Marks   Science_Marks   Science_Marks   Science_Marks   Finance_Marks   Finance_Marks   Finance_Marks   Finance_Marks
    Physics Physics Biology Biology Economics   Economics   Accounting  Accounting
    Theo    Prac    Theo    Prac    Theo    Prac    Theo    Prac
0   99      100     89      100     99      100     89      100

有人可以建议一种技术,将相同组的数字相加,直到倒数第二个指数水平.例如,Physics人(在Full_Grades-Science_Marks-Physics组下)的总数将是199人.如果最后一个索引级别名称不同(TheoPractical)也没关系.

对于这个帖子,我没有任何工作要展示,因为我真的不知道如何开始.另外,如果问题的标题或内容不清楚,请原谅.我尽我所能地写下了它们.如果需要进一步澄清,请告诉我.

编辑1:这是我正在寻找的输出—

    Full_Grades Full_Grades Full_Grades Full_Grades Full_Grades Full_Grades Full_Grades Full_Grades
    Science_Marks   Science_Marks   Science_Marks   Science_Marks   Finance_Marks   Finance_Marks   Finance_Marks   Finance_Marks
    Physics Physics Biology Biology Economics   Economics   Accounting  Accounting
    Theo    Prac    Theo    Prac    Theo    Prac    Theo    Prac
0   99      100     89      100     99      100     89      100
Sum     199            189             199             189

此外,我希望有一种方法来访问对应于行0的值,以便我可以进行各种分析,如总和、平均值等.

推荐答案

使用sum来聚合行,而不是unstack:

import pandas as pd
out = pd.concat({k: pd.concat({k2: pd.DataFrame(v2) for k2,v2 in v.items()}, axis = 1)
                  for k, v in nested_dict.items()}, axis = 1).sum().to_frame().T

输出:

    Full_Grades                                 
  Science_Marks         Finance_Marks           
        Physics Biology     Economics Accounting
0           199     189           199        189

Python相关问答推荐

即使在可见的情况下也不相互作用

Pystata:从Python并行运行stata实例

数据抓取失败:寻求帮助

两个pandas的平均值按元素的结果串接元素.为什么?

Python键入协议默认值

如何从pandas的rame类继承并使用filepath实例化

计算每个IP的平均值

计算天数

isinstance()在使用dill.dump和dill.load后,对列表中包含的对象失败

合并帧,但不按合并键排序

将标签移动到matplotlib饼图中楔形块的开始处

基于Scipy插值法的三次样条系数

当单元测试失败时,是否有一个惯例会抛出许多类似的错误消息?

根据客户端是否正在传输响应来更改基于Flask的API的行为

PySpark:如何最有效地读取不同列位置的多个CSV文件

浏览超过10k页获取数据,解析:欧洲搜索服务:从欧盟站点收集机会的微小刮刀&

大型稀疏CSR二进制矩阵乘法结果中的错误

奇怪的Base64 Python解码

将鼠标悬停在海运`pairplot`的批注/高亮显示上

Python:使用asyncio.StreamReader.readline()读取长行