pandas - 仅当字符串匹配时递增累计和

pandas - increment cumulative sum only when string is matched

我正在寻找几种条件下的累积值:如果 Condition == New,我只想添加值,并按名称对累积值进行分组。假设我有数据框 df:

Name | Condition | Value 
A    | New       | 5     
A    | Not New   | 7     
A    | New       | 15    
B    | Old       | 20    
B    | New       | 14    
B    | Old       | 3     

我正在寻找输出:

Name | Condition | Value | Cumulative Value
A    | New       | 5     | 5
A    | Not New   | 7     | 5
A    | New       | 15    | 20
B    | Old       | 20    | 0
B    | New       | 14    | 14
B    | Old       | 3     | 14

对于 Condition == New 的每个条目,我将当前值添加到当前累积值。否则,累积值应保持不变。当出现新名称时,如果条件的第一个条目是 'Old',我将累积值重置为零,或者如果条件的第一个条目是 'New'.[=16,则无论第一个值是什么=]

我被代码卡住了

df['Cumulative Value'] = df.groupby(['Name'])['Value'].cumsum()

这是对Name进行分组并计算所有的累加和。不确定如何继续添加额外条件以检查条件列的字符串并在条件不匹配时保持累积值不变。

可以把Condition不等于New的地方Value换成0再做累加:

df['Cumulative Value'] = df.Value.where(df.Condition == 'New', 0).groupby(df.Name).cumsum()

df
  Name Condition  Value  Cumulative Value
0    A       New      5                 5
1    A   Not New      7                 5
2    A       New     15                20
3    B       Old     20                 0
4    B       New     14                14
5    B       Old      3                14