【问题标题】:Restart cumsum in Pandas with condition在有条件的情况下重新启动 Pandas 中的 cumsum
【发布时间】:2021-04-09 08:40:14
【问题描述】:

我有列金额和资产。列目标应该是金额的总和,但如果之前的资产等于零,总和应该重置为当前金额。

示例:

+--------+--------+--------+
| amount | assets | target |
+--------+--------+--------+
|      6 |     10 |      6 |
|      8 |     20 |     14 |
|     -1 |      0 |     13 |
|      6 |      1 |      6 |
|     -7 |      0 |     -1 |
|      2 |      4 |      2 |
|     -5 |      7 |     -3 |
|      3 |      9 |      0 |
|      7 |      0 |      7 |
|      9 |      2 |      9 |
|      1 |      3 |     10 |
|     -4 |      5 |      6 |
+--------+--------+--------+

【问题讨论】:

    标签: pandas cumsum


    【解决方案1】:

    GroupBy.cumsum 与由0 比较列创建的组一起使用,并移动Series.shift,首先处理NaNSeries.cumsum

    g = df['assets'].eq(0).shift().bfill().cumsum()
    #alternative
    #g = df['assets'].eq(0).shift(fill_value=0).cumsum()
    df['new'] = df.groupby(g)['amount'].cumsum()
    
    print (df)
        amount  assets  target  new
    0        6      10       6    6
    1        8      20      14   14
    2       -1       0      13   13
    3        6       1       6    6
    4       -7       0      -1   -1
    5        2       4       2    2
    6       -5       7      -3   -3
    7        3       9       0    0
    8        7       0       7    7
    9        9       2       9    9
    10       1       3      10   10
    11      -4       5       6    6
    

    【讨论】:

      猜你喜欢
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 2020-12-23
      相关资源
      最近更新 更多