当满足另一列中的条件时,如何重置groupby总和?

2024-10-03 13:25:46 发布

您现在位置:Python中文网/ 问答频道 /正文

每次满足另一列中的条件时,我都试图将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)

股票是指我在买入/卖出后持有的股票数量。利润就是我想做一些与众不同的事情。如何在每次遇到“共享”列中的0时重置累积和?我试过一些东西,但我很烂

我要寻找的结果如下所示:

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

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


Tags: dfsabuy重置股票tickerdis利润
1条回答
网友
1楼 · 发布于 2024-10-03 13:25:46

可以使用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)
)

相关问题 更多 >