Python Groupby最大值并返回dataframe中相应的行

Python Groupby最大值并返回dataframe中相应的行,python,pandas,dataframe,group-by,max,Python,Pandas,Dataframe,Group By,Max,我的数据框架由学生、日期和考试分数组成。我想找到每个学生的最长日期并返回相应的行(最终,我最感兴趣的是学生最近的分数)。我怎样才能在熊猫身上做到这一点 假设我的数据框看起来像这样(缩写版本): 这就是我想要的: Student_id Date Score Tina1 1/17/17 .95 Lia1 12/13/16 .845 John2 1/25/17 .975 我发现这个是开着的,但它给了我一个位置索引器越界错误 df.iloc[d

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

假设我的数据框看起来像这样(缩写版本):

这就是我想要的:

Student_id  Date     Score
Tina1       1/17/17   .95
Lia1        12/13/16  .845
John2       1/25/17   .975
我发现这个是开着的,但它给了我一个位置索引器越界错误

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

还有哪些方法可以实现同样的效果?

您可以按日期对数据帧进行排序,然后使用
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
(如果没有重复的索引,则此操作有效):


您可以按日期对数据帧进行排序,然后使用
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
(如果没有重复的索引,则此操作有效):

df.loc[pd.to_datetime(df.Date, format='%m/%d/%y').groupby(df.Student_id).idxmax()]

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