2016-09-04 4 views
0

Ich habe ein Datenframe mit den folgenden Spalten: ['user_id', 'problem_id', 'timestamp']. Also wer hat wann was gelöst. Offensichtlich gibt es Benutzer, die viele Probleme gelöst haben.Extrahieren der letzten problem_id für jeden Benutzer

Ich möchte das letzte von jedem Benutzer gelöste Problem extrahieren. Mein erster Ansatz war, nach user_id zu gruppieren und das Maximum zu erhalten: df_s.groupby('user_id').max()[['problem_id']], aber nachdem ich es genauer betrachtet hatte, erkannte ich, dass es mir das höchste lexikographisch geordnete Problem zurückgeben wird, das vom Benutzer gelöst wurde.

Ich kann auch klar über Groupby Aggregation iterieren, sortieren Sie den Dataframe und nehmen Sie das erste Problem, aber ich hoffe auf eine schnelle one/paar Liner.

+0

So ' problem_id' ist keine ganze Zahl? Andernfalls ist 'df_s.groupby ('user_id') ['problem_id']. Max()' das, wonach Sie suchen ... –

+0

@NinjaPuppy ist eine hexadezimale Zeichenfolge. Aber selbst wenn es eine Ganzzahl ist, wird max höchstwahrscheinlich nur die höchste Ganzzahl aus der Liste der problem_ids zurückgeben, die der Benutzer gelöst hat und nicht die letzte –

+0

Ahhh okies - got ya –

Antwort

1

Wenn Ihr timestamp Sorten natürlich - das heißt - neueste Werte sind zuletzt, dann:

df_s.sort_values('timestamp').groupby('user_id').last() 

Sie geben sollten, was wollen Sie als groupby der Reihenfolge ihrer Eingabe für die Gruppierung behält ...

+0

Danke, wusste nicht über letzte, erste Aggregationen. –

Verwandte Themen