Python 如何计算学生在大熊猫某一科目中获胜的次数
我有一个如下所示的数据帧:Python 如何计算学生在大熊猫某一科目中获胜的次数,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个如下所示的数据帧: subjectID subjectMark totalMark Rank studentID 21376 52.000002 89.333335 2 10 21376 55.999998 91.6455245 1 11 21377 18.666666 89.333335 2 10 21377 17.333334 91.6455245 1 11 21
subjectID subjectMark totalMark Rank studentID
21376 52.000002 89.333335 2 10
21376 55.999998 91.6455245 1 11
21377 18.666666 89.333335 2 10
21377 17.333334 91.6455245 1 11
21379 4.3333335 89.333335 2 10
21379 4 91.6455245 1 11
21380 4.3333335 89.333335 2 10
21380 4.3333335 91.6455245 1 11
22601 10 89.333335 2 10
22601 9.978859 91.6455245 1 11
从上面可以看出,学生10在某些科目(如21377和22601科目)中表现更好,尽管总分排名第二,但我想统计一下排名第二的科目中有多少科目的得分高于排名第一的科目
因此,我希望df如下所示:
subjectID subjectMark totalMark Rank studentID #ofTimesBetteThan1st
21376 52.000002 89.333335 2 10 2
21376 55.999998 91.6455245 1 11 0
21377 18.666666 89.333335 2 10 2
21377 17.333334 91.6455245 1 11 0
21379 4.3333335 89.333335 2 10 2
21379 4 91.6455245 1 11 0
21380 4.3333335 89.333335 2 10 2
21380 4.3333335 91.6455245 1 11 0
22601 10 89.333335 2 10 2
22601 9.978859 91.6455245 1 11 0
您可以使用,然后通过分配
以下为df_pvt
,仅供参考。学生10有3倍的表现优于:
print(df_pvt)
studentID 10 11
subjectID
21376 52.000002 55.999998
21377 18.666666 17.333334
21379 4.333334 4.000000
21380 4.333334 4.333334
22601 10.000000 9.978859
您可以使用,然后通过分配
以下为df_pvt
,仅供参考。学生10有3倍的表现优于:
print(df_pvt)
studentID 10 11
subjectID
21376 52.000002 55.999998
21377 18.666666 17.333334
21379 4.333334 4.000000
21380 4.333334 4.333334
22601 10.000000 9.978859
使用
使用
df['ofTimesBetteThan1st']=0
df.loc[(df.Rank==2),'ofTimesBetteThan1st']=df.groupby('subjectID').subjectMark.diff().lt(0).sum()
df
Out[834]:
subjectID subjectMark totalMark Rank studentID ofTimesBetteThan1st
0 21376 52.000002 89.333335 2 10 3
1 21376 55.999998 91.645524 1 11 0
2 21377 18.666666 89.333335 2 10 3
3 21377 17.333334 91.645524 1 11 0
4 21379 4.333334 89.333335 2 10 3
5 21379 4.000000 91.645524 1 11 0
6 21380 4.333334 89.333335 2 10 3
7 21380 4.333334 91.645524 1 11 0
8 22601 10.000000 89.333335 2 10 3
9 22601 9.978859 91.645524 1 11 0