¿Cómo reiniciar el cumsum después del cambio en el signo de los valores?

In [46]: d = np.random.randn(10, 1) * 2 In [47]: df = pd.DataFrame(d.astype(int), columns=['data']) 

Estoy tratando de crear una columna cumsum donde debería restablecerse después de un cambio de signo en la columna de datos, como este

  data custom_cumsum 0 -2 -2 1 -1 -3 2 1 1 3 -3 -3 4 -1 -4 5 2 2 6 0 2 7 3 5 8 -1 -1 9 -2 -3 

Soy capaz de lograr esto con df.iterrows() . Estoy tratando de evitar las ventanas y hacerlo con operaciones vectoriales. Hay un par de preguntas sobre cómo reiniciar el cumsum cuando hay NaN. No puedo lograr este cumsum con esas soluciones.

Crear una nueva clave para groupby , luego hacer cumsum dentro de cada grupo

Nueva clave Crear: Al usar el cambio de signo, si cambiamos, agregaremos uno, entonces pertenecerá al grupo de nidos.

 df.groupby(df.data.lt(0).astype(int).diff().ne(0).cumsum()).data.cumsum() Out[798]: 0 -2 1 -3 2 1 3 -3 4 -4 5 2 6 2 7 5 8 -1 9 -3 Name: data, dtype: int64