首页 > 解决方案 > Groupby 百分比列

问题描述

我有一个数据框

Student   Exam    Month     
1         Maths    10      
1         Maths    10      
1         Maths    11      
1         Science  10      
1         Physics  10      
2         science  11
2         physics  11
2         Maths    12

我想要按学生,按月计算的每次考试的输出百分比

Student   Exam    Month    Pourcentage 
1         Maths    10      50%
1         Maths    11      100%
1         Science  10      25%
1         physics  10      25%
2         physics  11      50%
2         science  11      50%
2         Maths    12      100

我试图使用这段代码,但它没有给出正确的结果

Count_exam= df.groupby('student','Exam')[Month].count()
Count_month= df.groupby('student')[Month].count()
df['Pourcentage] = Count_exam * 100 /Count_month

标签: pythonpandas

解决方案


IIUC,您可以简单地按size每组划分:

df["Pct"] = 1/df.groupby(["Student", "Month"])["Exam"].transform("size")*100

print (df.groupby(["Student", "Exam", "Month"], as_index=False).agg("sum"))

   Student     Exam  Month    Pct
0        1    Maths     10   50.0
1        1    Maths     11  100.0
2        1  Physics     10   25.0
3        1  Science     10   25.0
4        2    Maths     12  100.0
5        2  physics     11   50.0
6        2  science     11   50.0

推荐阅读