2017-07-07 5 views
0

Mein Datenrahmen besteht aus Studenten, Daten und Testergebnisse. Ich möchte das maximale Datum für jeden Studenten finden und die entsprechende Reihe zurückgeben (schließlich interessiere ich mich am meisten für die neueste Punktzahl des Schülers). Wie könnte ich das in Pandas machen?Groupby max value und return entsprechende Zeile in Pandas Dataframe

mein Datenrahmen wie dies Lassen Sie sagen, sieht (eine gekürzte Version):

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 

Dies ist, was ich will:

Student_id Date  Score 
Tina1  1/17/17 .95 
Lia1  12/13/16 .845 
John2  1/25/17 .975 

ich dies auf SO gefunden, aber es gibt mir eine Positions Indexer aus -of-bounds Fehler.

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

Was sind andere Ansätze, um das gleiche zu erreichen?

Antwort

2

Sie können den Datenrahmen nach Datum sortieren und dann groupby.tail verwenden, um die jüngsten Datensatz zu erhalten:

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 

Oder vermeiden sortieren, verwenden idxmax (dies funktioniert, wenn Sie haben Index nicht dupliziert):

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 
Verwandte Themen