Процент от общего размера после Python GROUP BY

1
   code_module  final_result

    AAA      Distinction            44
                  Fail              91
                 Pass              487
                Withdrawn          126

ЭТО ИТОГ ПИТОНОВОГО КОДА

 studentInfo.groupby(['code_module','final_result']).agg({'code_module':[np.size]})
  • Я хочу рассчитать процент каждого final_result от общего
  • математика AAA.pass/AAA.total

  • сумма является суммой всех чисел выше.

  • 0
    Я не уверен, что вы можете агрегировать что-то, что используется в groupby . В настоящее время у вас есть 'code_module' работающий в обеих операциях.
  • 0
    Вы используете панды?
Показать ещё 2 комментария
Теги:
pandas
excel
data-analysis

1 ответ

0
Лучший ответ

Я считаю, что вам нужен 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 нет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню