如何根据列条件做 cumsum?

How to do cumsum based on column condition?

我正在尝试为以下数据框执行按名称分组的 cumsum:

df = pd.DataFrame( columns = ['Name','Status']) 
df['Name'] = ['Anton','Anton','Anton','Anton','Bev','Bev','Bev','Bev','Chad','Chad','Chad','Chad']
df['Status'] =[1,1,1,1,1,1,0,1,0,0,1,1] 
df

每个名称的第一个实例应从 1 开始,并且仅当状态列等于 1 时才应在其后求和,否则应沿用该值以提供附加列,如下所示:

df['Expected Result'] = [1,2,3,4,1,2,2,3,1,1,1,2]
df

我已经尝试对名称进行分组并使用 cumsum()+1 函数,但我不确定如何继续。

这是你想要的吗?

df['Expected Result'] = df.groupby('Name').cumsum()
df

生产

    Name    Status  Expected Result
0   Anton   1   1
1   Anton   1   2
2   Anton   1   3
3   Anton   1   4
4   Bev     1   1
5   Bev     1   2
6   Bev     0   2
7   Bev     1   3
8   Chad    0   0
9   Chad    0   0
10  Chad    1   1
11  Chad    1   2

你试过 df.groupby(['Name']).cumsum() 了吗? 这是结果:

    Status
0        1
1        2
2        3
3        1
4        1
5        2
6        2
7        3
8        0
9        0
10       1
11       2

我们可以transform调整

df.groupby('Name')['Status'].cumsum() + 1-df.groupby('Name')['Status'].transform('first')
Out[8]: 
0     1
1     2
2     3
3     4
4     1
5     2
6     2
7     3
8     1
9     1
10    2
11    3
Name: Status, dtype: int64