seleccionar manejo filas documentacion datos data crear con columnas cargar python pandas group-by pandas-groupby

python - manejo - Agrupe por marco de datos de pandas y seleccione lo último en cada grupo



seleccionar datos de un dataframe python (5)

Dado un marco de datos ordenado por fecha, puede obtener lo que solicita de varias maneras:

Me gusta esto:

df.groupby([''id'',''product'']).last()

Me gusta esto:

df.groupby([''id'',''product'']).nth(-1)

o así:

df.groupby([''id'',''product'']).max()

Si no desea que la id y el product aparezcan como índice, use groupby([''id'', ''product''], as_index=False) . Alternativamente use:

df.groupby([''id'',''product'']).tail(1)

¿Cómo agrupar los valores del marco de datos de pandas y seleccionar el último (por fecha) de cada grupo?

Por ejemplo, dado un marco de datos ordenado por fecha:

id product date 0 220 6647 2014-09-01 1 220 6647 2014-09-03 2 220 6647 2014-10-16 3 826 3380 2014-11-11 4 826 3380 2014-12-09 5 826 3380 2015-05-19 6 901 4555 2014-09-01 7 901 4555 2014-10-05 8 901 4555 2014-11-01

agrupando por id o producto, y seleccionando los primeros da:

id product date 2 220 6647 2014-10-16 5 826 3380 2015-05-19 8 901 4555 2014-11-01


Para usar .tail() como método de agregación y mantener intacta su agrupación:

df.sort_values(''date'').groupby(''id'').apply(lambda x: x.tail(1)) id product date id 220 2 220 6647 2014-10-16 826 5 826 3380 2015-05-19 901 8 901 4555 2014-11-01


También puede usar tail con groupby para obtener los últimos n valores del grupo:

df.sort_values(''date'').groupby(''id'').tail(1) id product date 2 220 6647 2014-10-16 8 901 4555 2014-11-01 5 826 3380 2015-05-19


Tuve un problema similar y terminé usando drop_duplicates lugar de groupby .

Parece correr significativamente más rápido en grandes conjuntos de datos en comparación con otros métodos sugeridos anteriormente.

df.sort_values(by="date").drop_duplicates(subset=["id"], keep="last") id product date 2 220 6647 2014-10-16 8 901 4555 2014-11-01 5 826 3380 2015-05-19


use idxmax en groupby y corte df con loc

df.loc[df.groupby(''id'').date.idxmax()] id product date 2 220 6647 2014-10-16 5 826 3380 2015-05-19 8 901 4555 2014-11-01