下面的代码可以很好地识别以下行中的值是否命中,并给出显示满足条件时间的输出列。你知道吗
import datetime,numpy as np,pandas as pd;
nan = np.nan;
a = pd.DataFrame( {'price': {datetime.time(9, 0): 1, datetime.time(10, 0): 0, datetime.time(11, 0): 3, datetime.time(12, 0): 4, datetime.time(13, 0): 7, datetime.time(14, 0): 6, datetime.time(15, 0): 5, datetime.time(16, 0): 4, datetime.time(17, 0): 0, datetime.time(18, 0): 2, datetime.time(19, 0): 4, datetime.time(20, 0): 7}, 'reversal': {datetime.time(9, 0): nan, datetime.time(10, 0): nan, datetime.time(11, 0): nan, datetime.time(12, 0): nan, datetime.time(13, 0): nan,
datetime.time(14, 0): 6.0, datetime.time(15, 0): nan, datetime.time(16, 0): nan, datetime.time(17, 0): nan, datetime.time(18, 0): nan, datetime.time(19, 0): nan, datetime.time(20, 0): nan}});
a['target_hit_time']=a['target_miss_time']=nan;
a['target1']=a['reversal']+1;
a['target2']=a['reversal']-a['reversal'];
a.sort_index(1,inplace=True);
hits = a.ix[:,:-2].dropna();
for row,hit in hits.iterrows():
forwardRows = [row]<a['price'].index.values
targetHit = a.index.values[(hit['target1']==a['price'].values) & forwardRows][0];
targetMiss = a.index.values[(hit['target2']==a['price'].values) & forwardRows][0];
if targetHit>targetMiss:
a.loc[row,"target_miss_time"] = targetMiss;
else:
a.loc[row,"target_hit_time"] = targetHit;
a
此图显示了上述代码的输出,通过运行此代码可以轻松地再现这些输出:
我的问题是,当这个代码用于实际数据时,价格可能不完全匹配和/或可能有差距。如果我们看下面的图片:
我们看到,如果我们寻找的是值>= 7.5
,而不仅仅是值7.5
,那么target1
标准就会得到满足。有人能帮我修改代码来实现这一点吗?你知道吗
在不大量修改代码的情况下,我得出了以下结论:
这仍有待改进,因为targetHit、targetMiss返回一个数组,您需要检查数组中是否有任何元素,以及两个数组中是否都有元素—您需要比较第一个元素。现在它只在一个数组为空时工作。你知道吗
一些假设,仅此而已:D。。。你知道吗
相关问题 更多 >
编程相关推荐