重置后的累积总和

Cumulative sum with a reset

我想使用 pandas 的 cumsum 函数,并在满足条件时重置此累积序列。例如我有这个 df :

       o  values
   0   1       4
   1   1       4
   2   2       2
   3   2       5
   4   3       1
   5   3      10

并且 'o' 的值为 +1 我想重置累计和。我知道我可以通过 :

找到条件
s = df['o'].diff() == 1

其中 return 一个布尔系列,其中一行 ['o'] 是 + 1。

我怎样才能继续得到以下结果:

       o  values  cum_sum
   0   1       4        4
   1   1       4        8
   2   2       2        2
   3   2       5        7
   4   3       1        1
   5   3      10       11

感谢您的帮助和宝贵时间!

您可以使用 pd.DataFrame.groupby and cumsum():

df['cumsum']=df.groupby('o').cumsum()

输出:

df
   o  values  cumsum
0  1       4       4
1  1       4       8
2  2       2       2
3  2       5       7
4  3       1       1
5  3      10      11

使用:

df['cum_sum'] = df.groupby('o').transform('cumsum')

输出:

    o   values  cum_sum
0   1   4       4
1   1   4       8
2   2   2       2
3   2   5       7
4   3   1       1
5   3   10      11