如何在嵌套的Pandas数据框中对相同组的值求和,直至倒数第二个索引级别
我根据这个帖子的说明,创建了一个从嵌套字典生成的简单示例,里面有嵌套的pandas数据框。
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
有没有人能建议一种方法,来把同一组的数字加起来,直到倒数第二个索引层级?比如说,在组 Full_Grades-Science_Marks-Physics
下,Physics
的总和应该是199。最后一个索引层级的名字不同(比如 Theo
和 Practical
)也没关系。
对于这个帖子,我没有任何工作成果可以展示,因为我真的不知道该从哪里开始。另外,如果问题的标题或内容不清楚,我也很抱歉。我尽力写得清楚。如果需要进一步的解释,请告诉我。
编辑 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
行对应的值,这样我就可以进行各种分析,比如求和、平均值等等。
1 个回答
1
与其使用 unstack
,不如用 sum
来对行进行汇总:
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