Ich habe folgenden Datenrahmen:Pandas - jüngsten Wert einer bestimmten Spalte von einer anderen Spalte indiziert bekommen (erhält Maximalwert einer bestimmten Spalte von einer anderen Spalte indiziert)
obj_id data_date value
0 4 2011-11-01 59500
1 2 2011-10-01 35200
2 4 2010-07-31 24860
3 1 2009-07-28 15860
4 2 2008-10-15 200200
Ich mag eine Teilmenge davon bekommen, diese Daten, so dass ich nur die neueste (größte 'data_date'
) 'value'
für jede 'obj_id'
haben.
Ich habe eine Lösung zusammen gehackt, aber es fühlt sich schmutzig an. Ich habe mich gefragt, ob jemand einen besseren Weg hat. Ich bin mir sicher, dass ich einen einfachen Weg verpassen muss, um es durch Pandas zu tun.
Mein Verfahren ist im Wesentlichen zu einer Gruppe, zu sortieren, Abrufen und rekombinieren wie folgt:
row_arr = []
for grp, grp_df in df.groupby('obj_id'):
row_arr.append(dfg.sort('data_date', ascending = False)[:1].values[0])
df_new = DataFrame(row_arr, columns = ('obj_id', 'data_date', 'value'))
i die Geschwindigkeit auf einem Datenrahmen mit 24.735 Zeilen getestet, gruppiert in 16 Gruppen (btw: Dataset aus planethunter.org) und bekam 12,5 ms (argmax) vs 17,5 ms (sortiert) als ein Ergebnis von% Zeit. Beide Lösungen sind also ziemlich schnell :-) und mein Datensatz scheint zu klein zu sein ;-) – Maximilian