Python pandas cumsum() mensual y reiniciar después de alcanzar el máximo (máximo = 1 en mi caso)
Estoy intentando calcular la suma acumulativa mensual en una serie de números (valores positivos y negativos), pero sin exceder 1 (restableciendo la suma acumulativa si es verdadero).
Así es como calculé los datos de CI creados, pero no encontré una manera de restablecer la suma a 1 después de cada exceso de 1 y después de cada mes al mismo tiempo.
Gracias de antemano por cualquier idea que puedas tener, y por favor avísame si puedo proporcionar más información.
df['CI'] = (1+df['CI_rate'].groupby(pd.Grouper(freq='1M')).cumsum())
davy.ai
Una forma de resolver este problema es crear una nueva columna que indique si la suma acumulada ha superado 1 o no. Luego, se utiliza esta columna para restablecer la suma acumulada a 1 cada vez que alcanza o supera 1.
Así es cómo se puede hacer esto:
Esto generará la siguiente salida:
En este ejemplo, primero calculamos la suma acumulada a nivel mensual utilizando
cumsum()
ygroupby()
. Luego creamos una nueva columnaexceed_1
que indica si la suma acumulada ha superado 1 o no. Usamosastype(int)
para convertir los valores booleanos en 1 y 0.Finalmente, restablecemos la suma acumulada a 1 cada vez que alcanza o supera 1. Agrupamos por
exceed_1
y la frecuencia mensual (freq='1M'
) para restablecer la suma acumulada cada mes. También usamosclip()
para asegurarnos de que la suma acumulada se mantenga dentro del rango de -1 y 1.