Groupby max value并返回pandas datafram中相应的行

2024-10-03 00:27:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据框由学生、日期和考试成绩组成。我想找到每个学生的max date并返回相应的行(最终,我最感兴趣的是学生最近的分数)。我怎么能在熊猫身上做到这一点?在

假设我的数据帧如下(缩写版本):

Student_id  Date     Score
Tina1       1/17/17   .95
John2       1/18/17   .8
Lia1        12/13/16  .845
John2       1/25/17   .975
Tina1       1/1/17    .78
Lia1        6/12/16   .89

这就是我想要的:

^{pr2}$

我在SO上找到了这个,但是它给了我一个位置索引器越界错误。在

df.iloc[df.groupby('student_id').apply(lambda x: x['date'].idxmax())]

还有什么方法可以达到同样的效果?在


Tags: 数据版本iddfdatestudent学生分数
1条回答
网友
1楼 · 发布于 2024-10-03 00:27:25

您可以按日期对数据帧进行排序,然后使用groupby.tail获取最新记录:

df.iloc[pd.to_datetime(df.Date, format='%m/%d/%y').argsort()].groupby('Student_id').tail(1)

#Student_id     Date    Score
#2     Lia1 12/13/16    0.845
#0    Tina1  1/17/17    0.950
#3    John2  1/25/17    0.975

或者避免排序,请使用idxmax(如果没有重复的索引,则可以这样做):

^{pr2}$

相关问题 更多 >