我在“关闭”列上有一个价格信息的数据框。我在“买”和“卖”列中有指标,它们是布尔值。我希望将一个函数应用于“关闭”列中的实例,前提是仅当“购买”的条件成立时。当'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
答案 0 :(得分:1)
下面的代码将获得您想要的回报:
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
答案 1 :(得分:0)
results = thing[thing['A']]['B']
但是警告:这比您想要的要慢得多。因为您的函数不是矢量化的,所以它将消除您从矢量化计算获得的所有速度。如果您打算做的下一件事是完全提取那些修改后的值(例如>>> thing[thing['A']]['B'] ** 2
0 1
2 81
Name: B, dtype: int64
),则应将函数应用于masked系列:
import urllib3
import serial
import json
s = serial.Serial('com4', 9600)
conn = urllib3.PoolManager()
def get_speed(conn):
r = conn.request('GET', 'http://localhost:8180/crest2/v1/api')
data = json.loads(r.data.decode())
metersPerSec = int(data['carState']['mSpeed'])
kilometersPerHour = int(metersPerSec * 3.6)
kilometersPerHour = str(kilometersPerHour) + '\n'
print(kilometersPerHour)
s.write((kilometersPerHour.encode()))
s.flush()
running=True
while running:
get_speed(conn)