Pandas:dataframe cumsum,如果其他列为false则重置

The*_*Guy 1 numpy dataframe pandas cumsum

我有一个包含2列的数据框,这里的目标很简单; 如果行列设置为False,则重置df.cumsum();

DF

      value      condition
0       1            1
1       2            1
2       3            1
3       4            0
4       5            1
Run Code Online (Sandbox Code Playgroud)

想要的结果如下:

DF

      value      condition
0       1            1
1       3            1
2       6            1
3       4            0
4       9            1
Run Code Online (Sandbox Code Playgroud)

如果我循环数据帧,如本文所述Python pandas cumsum()重置后达到最大值 我可以实现想要的结果,但我正在寻找一个更加矢量化的方式使用pandas标准函数

ALo*_*llz 5

怎么样:

df['cSum'] = df.groupby((df.condition == 0).cumsum()).value.cumsum()
Run Code Online (Sandbox Code Playgroud)

输出:

   value  condition  cSum
0      1          1     1
1      2          1     3
2      3          1     6
3      4          0     4
4      5          1     9
Run Code Online (Sandbox Code Playgroud)

您将连续的行组合在一起,直到0condition列中遇到a ,然后cumsum分别在每个组中应用.