python - 如果相应(相同索引点)列 B 的条件成立,则将函数应用于列 A
问题描述
我有一个数据框,其中包含“关闭”列的定价信息。我在“买入”和“卖出”列中有指标,它们是布尔值。当且仅当“购买”的条件成立时,我想将一个函数应用于“关闭”列中的实例。当 'BUY' == 1 时,将函数(在给定时间段内返回)应用于相应的 'close' 值。我添加了一张图片来说明我的意思并显示数据框。
谢谢
3233 108.60 0.0 0.0
3234 107.15 0.0 0.0
3235 106.70 0.0 0.0
3236 109.85 0.0 0.0
3237 107.45 0.0 0.0
3238 109.65 0.0 0.0
3239 107.25 0.0 0.0
3240 106.05 0.0 0.0
3241 101.00 0.0 0.0
3242 100.45 0.0 0.0
3243 100.75 0.0 0.0
3244 99.80 0.0 0.0
3245 96.70 0.0 0.0
3246 94.80 0.0 0.0
3247 94.05 0.0 0.0
3248 92.95 0.0 0.0
3249 93.55 0.0 0.0
3250 91.90 0.0 0.0
3251 91.25 1.0 0.0
3252 95.15 0.0 0.0
3253 93.80 0.0 0.0
3254 95.05 0.0 0.0
3255 95.80 0.0 0.0
3256 101.70 0.0 0.0
3257 106.90 0.0 0.0
3258 102.50 0.0 0.0
3259 96.75 0.0 0.0
3260 100.25 0.0 0.0
3261 98.00 0.0 0.0
3262 98.20 0.0 0.0
解决方案
下面的代码将获得您想要的回报:
import pandas as pd
data = pd.DataFrame({
'Index':range(452, 464),
'close':[113.05,112.05,111.45,114.20,109.45,110.50,109.65,114.4,110.15,110.90,112.25,117.75],
'BUY':[1,1,0,0,0,0,0,0,0,0,0,0],
'SELL':[0,0,0,0,0,0,0,0,0,0,0,0]
})
def calculate_buy_returns(data, n):
returns = []
for i, row in data.iterrows():
if row.BUY == 1:
if (i + n) < len(data):
# get the close price at index + n
close_n = data[data.index == (i + n)].iloc[0].close
returns.append((close_n - row.close)/row.close)
else:
returns.append(0)
else:
returns.append(0)
return returns
data['returns'] = calculate_buy_returns(data, 10)
print(data)
输出是:
Index close BUY SELL returns
0 452 113.05 1 0 -0.007077
1 453 112.05 1 0 0.050870
2 454 111.45 0 0 0.000000
3 455 114.20 0 0 0.000000
4 456 109.45 0 0 0.000000
5 457 110.50 0 0 0.000000
6 458 109.65 0 0 0.000000
7 459 114.40 0 0 0.000000
8 460 110.15 0 0 0.000000
9 461 110.90 0 0 0.000000
10 462 112.25 0 0 0.000000
11 463 117.75 0 0 0.000000
推荐阅读
- javascript - 触发器执行和编辑器执行的 Google Apps 脚本执行超时是否不同?
- java - 如何从 Aadhaar 卡的安全 QR 码验证手机号码和电子邮件 ID
- c - C 静态结构声明指令
- python - 如何在 3D 图中绘制圆?
- javascript - 为什么画布开始路径显示代码错误?
- android - 在 Android 画布上绘制 VectorDrawables 的奇怪行为
- html - 您如何准确填写网站的任何屏幕?
- amazon-s3 - 如何在 CarrierWave 中使用两个不同的 AWS S3 账户?
- python - 在二维列表中查找周围元素
- r - 如何删除模式前的所有文本?