У меня есть следующие df
,
amount id year_month
20 10 201903
20 10 201903
50 20 201903
10 20 201903
5 30 201903
5 40 201903
30 50 201904
10 60 201904
10 70 201904
5 80 201904
Я хочу groupby
id
и year_month
и получить sum
из amount
сначала,
df_1 = df.groupby(['id', 'year_month'], as_index=False)['amount'].sum()
затем разделите эту сумму amount
на amount
сумму year_month
groupby
,
df_1['pct']=df_1['amount'].div(df_1.groupby('year_month')['amount'].transform('sum')).mul(100).round(2)
amount id year_month pct
40 10 201903 36.36
60 20 201903 54.55
5 30 201903 4.55
5 40 201903 4.55
30 50 201904 54.55
10 60 201904 18.18
10 70 201904 18.18
5 80 201904 9.09
Я хочу сначала отсортировать pct
в каждом year_month
(например,201903
) в порядке убывания;затем вычислите процент id
с, чья общая сумма pct
меньше или равна 80
в каждом year_month
;Мне интересно, каков наилучший способ сделать это, и результат будет выглядеть (используя year_month
значения в качестве заголовков);
201903 201904
25% 50%