【问题标题】:Create a column counting number of consecutive negative days创建一列计算连续负天数
【发布时间】:2020-10-30 16:45:52
【问题描述】:

我有巨大的(超过 300 万行)pandas 数据框,其中包含以下数据:

companyId     dateBalance       amount 
    1          2020-04-17         100     
    1          2020-04-18          40       
    1          2020-04-19          20       
    1          2020-04-20         -40       
    1          2020-04-21          30       
    2          2020-04-18           5       
    2          2020-04-19           1       
    2          2020-04-20          -6       
    2          2020-04-21          -60      
    2          2020-04-22          200      

我想创建一个新列来计算公司连续出现负余额的天数,因此对于这种情况,我们有以下内容

companyId     dateBalance       amount  negCount
    1          2020-04-17         100       0
    1          2020-04-18          40       0
    1          2020-04-19          20       0
    1          2020-04-20         -40       1
    1          2020-04-21          30       0
    2          2020-04-18           5       0
    2          2020-04-19           1       0
    2          2020-04-20          -6       1
    2          2020-04-21          -60      2 
    2          2020-04-22          200      0

有没有一种快速的方法来做到这一点(即某种不需要在每一行上进行迭代的方法)?请注意,索引必须“重置”每个符号更改以及每个不同的公司。

【问题讨论】:

    标签: pandas dataframe iteration cumsum


    【解决方案1】:

    使用groupby().cumsum() 否定标准来识别块,然后再次按块分组:

    blocks = df['amount'].ge(0).groupby(df['companyId']).cumsum()
    df['negCount'] = df.groupby([df['companyId'],blocks]).cumcount()
    

    输出:

       companyId dateBalance  amount  negCount
    0          1  2020-04-17     100         0
    1          1  2020-04-18      40         0
    2          1  2020-04-19      20         0
    3          1  2020-04-20     -40         1
    4          1  2020-04-21      30         0
    5          2  2020-04-18       5         0
    6          2  2020-04-19       1         0
    7          2  2020-04-20      -6         1
    8          2  2020-04-21     -60         2
    9          2  2020-04-22     200         0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-18
      • 2023-03-25
      • 1970-01-01
      • 2019-03-28
      • 2016-02-02
      相关资源
      最近更新 更多