code_module final_result
AAA Distinction 44
Fail 91
Pass 487
Withdrawn 126
ЭТО ИТОГ ПИТОНОВОГО КОДА
studentInfo.groupby(['code_module','final_result']).agg({'code_module':[np.size]})
математика AAA.pass/AAA.total
сумма является суммой всех чисел выше.
Я считаю, что вам нужен SeriesGroupBy.value_counts
с параметром normalize
:
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
нет.
groupby
. В настоящее время у вас есть'code_module'
работающий в обеих операциях.