python - 满足另一列中的条件时如何重置groupby cumsum?
问题描述
每次满足另一列中的条件时,我都会尝试将 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
在此先感谢,如果我能提供更多信息,请告诉我。
解决方案
您可以使用以下命令检测块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)
)
推荐阅读
- reactjs - 涉及 Redux、useContext 和 HOC 的架构有哪些缺陷和性能问题?
- neo4j - 从 CSV 加载时如何创建节点、创建关系和删除属性?
- nlp - Powerbi on Prem 上的 NLP
- paypal - paypal 订单号的有效期是多久?
- android - ExoPlayer 无法播放分辨率为 1080p 的直播流
- python - ndarray.shape 返回什么?
- php - PHP foreach 循环从 mysql 创建 JSON
- spring - 如果有 @Bean-method 证明单个 bean,则 @Bean-method 提供列表将被忽略
- android - 对象在作为 Parcelable 对象传递后为空
- javafx - 使用 Sublime Text 3 编译 JavaFX 时出现问题