Tengo un dataFrame como este, me gustaría agrupar cada 60 minutos y comenzar a agrupar a las 06:30.
data index 2017-02-14 06:29:57 11198648 2017-02-14 06:30:01 11198650 2017-02-14 06:37:22 11198706 2017-02-14 23:11:13 11207728 2017-02-14 23:21:43 11207774 2017-02-14 23:22:36 11207776Estoy usando:
df.groupby(pd.TimeGrouper(freq='60Min'))Obtengo esta agrupación:
data index 2017-02-14 06:00:00 x1 2017-02-14 07:00:00 x2 2017-02-14 08:00:00 x3 2017-02-14 09:00:00 x4 2017-02-14 10:00:00 x5pero estoy buscando este resultado:
data index 2017-02-14 06:30:00 x1 2017-02-14 07:30:00 x2 2017-02-14 08:30:00 x3 2017-02-14 09:30:00 x4 2017-02-14 10:30:00 x5¿Cómo puedo decirle a la función que comience a agruparse a las 6:30 en intervalos de una hora?
Si no lo puede hacer .groupby(pd.TimeGrouper(freq='60Min')) , ¿cuál es la mejor manera de hacerlo?
Un saludo y muchas gracias de antemano
Use base=30 junto con los parámetros label='right' en pd.Grouper .
Especificar label='right' hace que el período de tiempo comience a agruparse desde las 6:30 (lado superior) y no desde las 5:30. Además, 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.0Usando DataFrame.resample que es un método dedicado para volver a muestrear series temporales, 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.0Aviso : 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()