【问题标题】:pandas - increment cumulative sum only when string is matchedpandas - 仅当字符串匹配时才增加累积总和
【发布时间】:2021-10-28 20:22:55
【问题描述】:

我正在寻找一些条件下的累积值:我只想添加 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 的每个条目,我将当前值添加到当前累积值中。否则,累积值应保持不变。当一个新名称出现时,如果 Condition 的第一个条目是“旧”,或者如果 Condition 的第一个条目是“新”,我将累积值重置为零。

我被代码卡住了

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

这是对名称进行分组并计算所有累积总和。不知道如何继续添加额外的条件来检查条件列的字符串,如果条件不匹配,则保持累积值不变。

【问题讨论】:

    标签: python pandas group-by conditional-statements cumsum


    【解决方案1】:

    你可以用0替换Value,其中Condition不等于New,然后做累加:

    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
    

    【讨论】:

      猜你喜欢
      • 2017-01-05
      • 2019-02-15
      • 2021-06-15
      • 2020-06-27
      • 2013-02-11
      • 2014-07-13
      • 1970-01-01
      • 2017-08-09
      • 2020-08-24
      相关资源
      最近更新 更多