我有一个这样的DataFrame:
student marks term
steve 55 1
jordan 66 2
steve 53 1
alan 74 2
jordan 99 1
steve 81 2
alan 78 1
alan 76 2
jordan 48 1
我想返回每个学生最高的两个分数
student marks term
steve 81 2
steve 55 1
jordan 99 1
jordan 66 2
alan 78 1
alan 76 2
我试过了
df = df.groupby('student')['marks'].max()
但它返回1行,我希望每个学生在他们提到的顺序与前两名的分数。
3条答案
按热度按时间vsmadaxz1#
您可以使用
groupby
+nlargest
来查找2个最大值;然后使用loc
按照它们在df
中出现的顺序进行排序:输出:
如果你也想保留"terms",你可以使用索引:
输出:
@sammywemmy建议了一个更好的方法来推导第二个结果:
qvtsj1bj2#
您应该使用:
(with可选的
.reset_index()
)ubof19bj3#
在分组之前进行排序就足够了,因为您需要保留
term
列: