Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

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

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 11207776

Estoy 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 x5

pero 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

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

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.0
over 4 years ago · Santiago Trujillo Denunciar

0

Usando 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.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()
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda