根据特定条件重置的累积和

Cumulative Sum that resets based on specific condition

假设我有以下数据:

df=pd.DataFrame({'Days':[1,2,3,4,1,2,3,4],
                'Flag':["First","First","First","First","Second","Second","Second","Second"],
                'Payments':[1,2,3,4,9,3,1,6]})

我想为付款创建一个累计金额,但是当标志从第一变为第二时它必须重置。有帮助吗?

我正在寻找的输出如下:

不确定这是否是你想要的,因为你没有提供输出但试试这个

df=pd.DataFrame({'Days':[1,2,3,4,1,2,3,4],
                'Flag':["First","Second","First","Second","First","Second","Second","First"],
                'Payments':[1,2,3,4,9,3,1,6]})
# make groups using consecutive Flags
groups = df.Flag.shift().ne(df.Flag).cumsum()
# groupby the groups and cumulatively sum payments
df['cumsum'] = df.groupby(groups).Payments.cumsum()
df

您可以使用 df['Flag'].ne(df['Flag'].shift()).cumsum() 生成一个石斑鱼,该石斑鱼将根据 Flag 列中的更改进行分组。然后,按此分组,然后 cumsum:

df['cumsum'] = df['Payments'].groupby(df['Flag'].ne(df['Flag'].shift()).cumsum()).cumsum()

输出:

>>> df
   Days    Flag  Payments  cumsum
0     1   First         1       1
1     2   First         2       3
2     3   First         3       6
3     4   First         4      10
4     1  Second         9       9
5     2  Second         3      12
6     3  Second         1      13
7     4  Second         6      19

有什么问题

df['Cumulative Payments'] = df.groupby('Flag')['Payments'].cumsum()

   Days    Flag  Payments  Cumulative Payments
0     1   First         1                    1
1     2   First         2                    3
2     3   First         3                    6
3     4   First         4                   10
4     1  Second         9                    9
5     2  Second         3                   12
6     3  Second         1                   13
7     4  Second         6                   19