我的列类似于A,我想创建另一个列B来计算成功的外观:
A B
---|---
1 | 0
0 | 0
0 | 0
1 | 1
0 | 1
0 | 1
1 | 2
0 | 2
0 | 2
-1 | 0
0 | 0
0 | 0
-1 |-1
0 |-1
-1 |-2
0 |-2
0 |-2
1 | 0
0 | 0
1 | 1
0 | 1
1 | 2
1 | 3
0 | 3
答案 0 :(得分:1)
在您的情况下,请使用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