В вашем случае создайте групповой ключ, используя ffill
с cumsum
, затем groupby
cumsum
вычтите элемент first
каждой группы
g=df.groupby(df.A.mask(df.A==0).ffill().diff().ne(0).cumsum()).A
g.cumsum()-g.transform('first')
#df['B']= g.cumsum()-g.transform('first')
Out[303]:
0 0
1 0
2 0
3 1
4 1
5 1
6 2
7 2
8 2
9 0
10 0
11 0
12 -1
13 -1
14 -2
15 -2
16 -2
17 0
18 0
19 1
20 1
21 2
22 3
23 3
Name: A, dtype: int64