【问题标题】:How to reset a groupby cumsum when a condition in another column is met?满足另一列中的条件时如何重置groupby cumsum?
【发布时间】:2021-06-06 19:46:12
【问题描述】:

每次满足另一列中的条件时,我都会尝试将 cumsum 重置为零。这是我的数据框的样子:

ticker    cashflow op    shares profit
CPFE3.SA  -220.06  Buy    8          0
CPFE3.SA   249.93  Sell   0      29.87
CPFE3.SA   -90.03  Buy    3          0  
CPFE3.SA  -575.87  Buy    22         0
CPFE3.SA   -92.12  Buy    25         0
CPFE3.SA   763.52  Sell   0      35.37
DIS       -921.46  Buy    1          0

我正在使用以下内容来创建利润列:

df['profit'] = df.groupby(df.ticker)['cashflow'].cumsum().where(df.op=='Sell',0)

Shares 是我在买入/卖出后拥有的股票数量。利润是我想要做出一些不同的东西。每次在 share 列中遇到 0 时,如何重置 cumsum?我尝试了一些东西,但我很烂。

我正在寻找的结果如下所示:

ticker    cashflow op    shares profit
CPFE3.SA  -220.06  Buy    8          0
CPFE3.SA   249.93  Sell   0      29.87
CPFE3.SA   -90.03  Buy    3          0  
CPFE3.SA  -575.87  Buy    22         0
CPFE3.SA   -92.12  Buy    25         0
CPFE3.SA   763.52  Sell   0        5.5
DIS       -921.46  Buy    1          0

提前致谢,如果我能提供更多信息,请告诉我。

【问题讨论】:

    标签: python pandas pandas-groupby reset cumsum


    【解决方案1】:

    您可以使用cumsum 检测块:

    #print to see what it does
    blocks = df['shares'].eq(0)[::-1].cumsum()[::-1]
    
    df['profit'] =(df.groupby(['ticker', blocks])
       ['cashflow'].cumsum()
       .where(df['shares'].eq(0),0)
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 2021-08-25
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多