code_module  final_result

    AAA      Distinction            44
                  Fail              91
                 Pass              487
                Withdrawn          126


这是PYTHON CODE的结果

 studentInfo.groupby(['code_module','final_result']).agg({'code_module':[np.size]})



我想从总数中计算每个final_result的百分比
数学是AAA.pass / AAA.total
总数是上述所有数字的总和。

最佳答案

我相信您需要使用参数SeriesGroupBy.value_countsnormalize

s1 = studentInfo.groupby('code_module')['final_result'].value_counts(normalize=True)
print (s1)
code_module  final_result
AAA          Pass            0.651070
             Withdrawn       0.168449
             Fail            0.121658
             Distinction     0.058824
Name: final_result, dtype: float64


或按DataFrameGroupBy.size的每个第一级用sum除以MultiIndex来简化解决方案

s = studentInfo.groupby(['code_module','final_result']).size()
s2 = s.div(s.sum(level=0), level=0)
print (s2)
code_module  final_result
AAA          Distinction     0.058824
             Fail            0.121658
             Pass            0.651070
             Withdrawn       0.168449
dtype: float64


解决方案之间的区别是value_counts降序返回输出Series,以便第一个元素是最频繁出现的元素,而size不是。

10-05 23:42