如何根据列条件做 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
我正在尝试为以下数据框执行按名称分组的 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