Saltar al contenido

¿Cómo agrupar un marco de datos de pandas por un intervalo de tiempo definido?

El tutorial o código que encontrarás en este post es la resolución más eficiente y válida que hallamos a esta duda o problema.

Solución:

Usar base=30 junto con label='right' parámetros en pd.Grouper.

especificando label='right' hace que el horario para empezar a agrupar sea a partir de las 6:30 (lado superior) y no a las 5:30. También, base se establece en 0 de forma predeterminada, por lo tanto, es necesario compensarlos en 30 para tener en cuenta la propagación hacia adelante de las fechas.

Suponga que desea agregar el primer elemento de cada subgrupo, luego:

df.groupby(pd.Grouper(freq='60Min', base=30, label='right')).first()
# same thing using resample - df.resample('60Min', base=30, label='right').first()

rendimientos:

                           data
index                          
2017-02-14 06:30:00  11198648.0
2017-02-14 07:30:00  11198650.0
2017-02-14 08:30:00         NaN
2017-02-14 09:30:00         NaN
2017-02-14 10:30:00         NaN
2017-02-14 11:30:00         NaN
2017-02-14 12:30:00         NaN
2017-02-14 13:30:00         NaN
2017-02-14 14:30:00         NaN
2017-02-14 15:30:00         NaN
2017-02-14 16:30:00         NaN
2017-02-14 17:30:00         NaN
2017-02-14 18:30:00         NaN
2017-02-14 19:30:00         NaN
2017-02-14 20:30:00         NaN
2017-02-14 21:30:00         NaN
2017-02-14 22:30:00         NaN
2017-02-14 23:30:00  11207728.0

Usando DataFrame.resample que es un método dedicado para remuestrear series de tiempo, de esta manera no necesitamos DataFrame.GroupBy y pd.Grouper:

df.resample('60min', base=30, label='right').first()

Producción

                           data
index                          
2017-02-14 06:30:00  11198648.0
2017-02-14 07:30:00  11198650.0
2017-02-14 08:30:00         NaN
2017-02-14 09:30:00         NaN
2017-02-14 10:30:00         NaN
2017-02-14 11:30:00         NaN
2017-02-14 12:30:00         NaN
2017-02-14 13:30:00         NaN
2017-02-14 14:30:00         NaN
2017-02-14 15:30:00         NaN
2017-02-14 16:30:00         NaN
2017-02-14 17:30:00         NaN
2017-02-14 18:30:00         NaN
2017-02-14 19:30:00         NaN
2017-02-14 20:30:00         NaN
2017-02-14 21:30:00         NaN
2017-02-14 22:30:00         NaN
2017-02-14 23:30:00  11207728.0

Aviso: cuando tiene varias columnas en su marco de datos, debe especificar la columna en la que desea agregar:

df.resample('60min', base=30, label='right')['data'].first()

Agradecemos que quieras ayudar nuestro análisis escribiendo un comentario y dejando una valoración te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *