python - 替换重复值并在列中重复组合
问题描述
我在数据框中有“状态”列,其值为“Buy”、“Sell”和“NaN”:
No.Row | 状态 | 价格 |
---|---|---|
1 | 钠 | 10 |
2 | 卖 | 20 |
3 | 买 | 10 |
4 | 钠 | 5 |
5 | 买 | 6 |
6 | 买 | 30 |
7 | 卖 | 50 |
8 | 卖 | 25 |
9 | 买 | 40 |
10 | 买 | 35 |
11 | 钠 | 10 |
12 | 卖 | 5 |
我想有第一个“买入”,然后是“卖出”,分别(买入,卖出)。然后是“卖出”(现在)-“买入”(之前)的“减少”列的值。例如,在第 7 行,我们有 50(第 3 卷)-10(第 7 卷)= 40
理想输出:
No.Row | 状态 | 减少 |
---|---|---|
1 | ||
2 | ||
3 | 买 | |
4 | ||
5 | ||
6 | ||
7 | 卖 | 40 |
8 | ||
9 | 买 | |
10 | ||
11 | ||
12 | 卖 | -35 |
解决方案
一种方法是使用一个global
跟踪last buy
状态的变量。
然后使用减少方法来计算每次到达某个Sell
状态时的成本。
global last_buy
last_buy = None
def reduction(row):
global last_buy
if row.state == "Sell" and last_buy is not None:
cost = row.price - last_buy
last_buy = None
return cost
if row.state == "Buy" and last_buy is None:
last_buy = row.price
df["reduction"] = df.apply(reduction, axis=1)
输出:
state price reduction
0 NaN 10 NaN
1 Sell 20 NaN
2 Buy 10 NaN
3 NaN 5 NaN
4 Buy 6 NaN
5 Buy 30 NaN
6 Sell 50 40.0
7 Sell 25 NaN
8 Buy 40 NaN
9 Buy 35 NaN
10 NaN 10 NaN
11 Sell 5 -35.0
推荐阅读
- amazon-web-services - AWS EC2 目标跟踪扩展策略 - 扩展多个实例
- authentication - "detail": "未提供身份验证凭据。"
- php - PHP词比较和加权
- azure - Kudu 控制台 - 还原更改
- ionic3 - Ionic 2/3 iOS:将文件保存到 iCloud、Google Drive 等驱动应用程序中
- react-native - 反应导航自定义比例过渡动画,例如应用程序打开时
- javascript - SVG:在折线上应用过滤器隐藏折线
- vba - 使用用户窗体和文本框名称作为函数的参数
- angular - Angular 2 Http在正文上获取返回类型3错误
- jquery - 在 datetimepicker 引导程序中选择前一天后仅显示一天