pandas: ¿cómo agrupar por intervalos de tiempo de longitud variable?
Sé que es posible agrupar tus datos por intervalos de tiempo de la misma longitud utilizando la función resample
. Pero, ¿cómo puedo agrupar por intervalos de tiempo de longitud personalizada (es decir, intervalos de tiempo irregulares)?
Aquí hay un ejemplo:
Digamos que tenemos un dataframe con valores de tiempo, como este:
rng = pd.date_range(start='2015-02-11', periods=7, freq='M')
df = pd.DataFrame({ 'Date': rng, 'Val': np.random.randn(len(rng)) })
Y tenemos los siguientes intervalos de tiempo:
2015-02-12 —–
2015-05-10
2015-05-10 —–
2015-08-20
2015-08-20 —–
2016-01-01
Es claro que las filas con índice 0, 1, 2 pertenecen al primer intervalo de tiempo, las filas con índice 3, 4, 5 pertenecen al segundo intervalo de tiempo y la fila 7 pertenece al último intervalo de tiempo.
Mi pregunta es: ¿cómo agrupo estas filas de acuerdo a esos intervalos de tiempo específicos, para poder realizar funciones de agregación (por ejemplo, media) en ellas?
davy.ai
Para agrupar un dataframe por intervalos de tiempo irregulares, puedes hacer lo siguiente:
Convierte tu columna
Date
en el índice del dataframe usandoset_index
.Utiliza un bucle para iterar a través de los intervalos y utiliza
loc
para cortar el dataframe por índice y agrupar por el intervalo actual.Aplica la función de agregación deseada (por ejemplo,
mean
) a los datos agrupados.Concatena los dataframes resultantes para obtener el resultado final.
Aquí hay un código de ejemplo que demuestra esto:
En este ejemplo, cortamos el dataframe usando
loc
y agrupamos por frecuencia mensual utilizandopd.Grouper
. Puedes cambiar la frecuencia para ajustar tu nivel deseado de granularidad. Los dataframes resultantes se concatenan utilizandopd.concat
para obtener el resultado final.