tengo la siguiente trama de datos:pandas - Obtener mayor valor reciente de una columna en particular indexado por otra columna (obtener el valor máximo de una columna en particular indexado por otra columna)
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
quiero conseguir un subconjunto de esta información para que solo tenga la más reciente (la más grande 'data_date'
) 'value'
para cada 'obj_id'
.
He pirateado una solución, pero se siente sucia. Me preguntaba si alguien tiene una mejor manera. Estoy seguro de que me falta una forma fácil de hacerlo a través de los pandas.
Mi método es esencialmente para agrupar, clasificar, recuperar, y se recombinan como sigue:
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'))
he probado la velocidad de la trama de datos con 24735 filas, agrupados en 16 grupos (BTW: conjunto de datos de planethunter.org) y nos dieron 12,5 ms (argmax) vs 17,5 ms (Sort) como un resultado de% timeit. Así que ambas soluciones son bastante rápidas :-) y mi conjunto de datos parece ser demasiado pequeño ;-) – Maximilian