我有以下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
的{{1}}总数,
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
的{{1}}的百分比;我想知道什么是最好的方法,结果看起来像(使用year_month
值作为标题);
year_month
答案 0 :(得分:1)
默认情况下,功能groupby
按分组列排序,因此应省略sort_values
。然后使用具有累加总和的自定义Lambda函数,与Series.le
进行比较,对于True
的百分比使用mean
,最后将Series
转换为{ {3}}与Series.to_frame
进行转置:
DataFrame