Ho la seguente dataframe:panda - ottenere la maggior parte del valore recente di una determinata colonna indicizzata da un'altra colonna (ottenere il massimo valore di una determinata colonna indicizzata da un'altra colonna)
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
voglio ottenere un sottoinsieme di questi dati in modo che ho solo il più recente (più grande 'data_date'
) 'value'
per ogni 'obj_id'
.
Ho violato una soluzione, ma è sporco. Mi stavo chiedendo se qualcuno ha un modo migliore. Sono sicuro che mi manchi un modo semplice per farlo attraverso i panda.
mio metodo è essenzialmente raggruppare, ordinare, recuperare, e ricombinare come segue:
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'))
ho provato la velocità su un dataframe con 24735 righe, raggruppati in 16 gruppi (A proposito: DataSet da planethunter.org) ed ha ottenuto 12,5 ms (argmax) vs 17.5 ms (in ordine) come un risultato di% timeit. Quindi entrambe le soluzioni sono abbastanza veloci :-) e il mio set di dati sembra essere troppo piccolo ;-) – Maximilian