Calcula el promedio acumulado de 2 meses para un grupo en Pandas.
Estoy tratando de calcular un promedio móvil de dos meses de la puntuación de un jugador utilizando el siguiente df:
df = pd.DataFrame({'player_id': [1098, 1098, 1098, 1098, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116],
'date': ['2018-06-22', '2018-06-23', '2018-07-24', '2018-07-25',
'2018-07-22', '2018-07-23', '2018-07-24', '2018-07-25',
'2018-08-22', '2018-08-23', '2018-08-24', '2018-08-25'],
'score': [-2, 1, 2, 3, -8, 3, 2, -3, -2, 1, 2, 3]})
Quisiera que los promedios estén agrupados por la columna ‘player_ID’ para que el jugador 1098 tenga promedios de -2, -0.5, 0.33 y 1 respectivamente, para cada fila. Si solo hay una fecha en 2020, sería ese valor. Si hay una fecha en enero y febrero de 2020, la fila de enero sería ese valor, mientras que la fila de febrero sería el promedio de esos dos valores.
davy.ai
Para calcular el promedio móvil de dos meses de la puntuación de un jugador, podemos utilizar la función
rolling
de pandas.Primero, necesitamos convertir la columna
date
en un objetodatetime
utilizando la funciónto_datetime
:Luego, podemos establecer el índice del DataFrame para que sea la columna
date
utilizando el métodoset_index
:A continuación, podemos agrupar el DataFrame por
player_id
utilizando el métodogroupby
:Finalmente, podemos calcular el promedio móvil de dos meses utilizando la función
rolling
:La función
rolling
toma un argumentowindow
que hemos establecido en'60D'
para representar una ventana móvil de 60 días. También hemos aplicado la funciónmean
para calcular el promedio móvil.Para agregar los promedios móviles al DataFrame original, podemos restablecer el índice utilizando el método
reset_index
y luego concatenar los promedios móviles utilizando la funciónpd.concat
:Esto nos dará un DataFrame con una nueva columna
score_rolling_avg
que contiene los promedios móviles de dos meses para la puntuación de cada jugador.