值符号更改后如何重置 cumsum?

Chi*_*and 2 python dataframe pandas pandas-groupby

In [46]: d = np.random.randn(10, 1) * 2

In [47]: df = pd.DataFrame(d.astype(int), columns=['data'])
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个 cumsum 列,它应该在数据列中的符号更改后重置,如下所示

   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 
Run Code Online (Sandbox Code Playgroud)

我能够通过 实现这一点df.iterrows()。我试图避免迭代并通过向量运算来实现。当存在 NaN 时,有几个关于重置 cumsum的问题。我无法通过这些解决方案实现这个目标。

WeN*_*Ben 8

创建新密钥,然后在每个组中groupby执行cumsum

新键创建:通过使用符号change,如果change我们添加一个那么它将属于nest组

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
Run Code Online (Sandbox Code Playgroud)