python - 如何通过 pandas 数据框加快非常慢的迭代速度?
问题描述
我已经收集了几周的 500 毫秒股票数据。不,我想遍历每天的数据,并对其进行迭代以确定在任何给定的最后价格值下,特定的下限将通过多少次,然后在一天的剩余时间里通过特定的上限。在脚本开始搜索是否会达到上限之前,必须传递下限。
所以基本上如果第 i 行的最后一个价格是 10 并且下限是 9 和 11。代码将首先尝试找到剩余行 i+1...i+2... 达到下限的时刻,一旦达到下限,代码就会切换到寻找何时达到上限。如果达到上限,则成功将加 1,代码再次开始寻找下限,再次执行整个过程。
整个过程发生在每一行,因此基本上对于每一行,我们将有一列用于记录在该给定行之后的行中成功达到下限和上限的次数。
我遇到的问题是我每天大约有 14400 行,大约 40 天,所以大约有 576000 行数据。迭代绝对需要永远,为了让我对所有数据执行此操作,我需要我的计算机运行几天。我肯定不会以最有效的方式来做这件事吧?任何人都可以指出我可以以更有效的方式重写此代码的概念吗?还是我只是一直在等待它准备我的数据?
range_per = .00069 #the percentage determining lower and upper bound
data['Success?']=np.nan
data['Success? Count']=np.nan
#For every row count how many times the trade in the range would be successful
for i in range(0,len(data)):
last_price = data.at[i,'lastPrice']
lower_bound = last_price - last_price*range_per
upper_bound = last_price + last_price*range_per
lower_bound_reached = False
upper_bound_reached = False
success=0
for b in range(i+1,len(data)):
last_price = data.at[b,'lastPrice']
while lower_bound_reached == False:
if lower_bound - last_price >=0:
upper_bound_reached = False
lower_bound_reached = True
else:
break
while (upper_bound_reached == False and lower_bound_reached ==True):
if upper_bound - last_price <=0:
success+=1
lower_bound_reached = False
upper_bound_reached = True
else:
break
print('row %s: %s times' %(i, success))
data['Success? Count'][i] = success
if success>0:
data['Success?'][i] = True
else:
data['Success?'][i] = False
解决方案
推荐阅读
- javascript - Web Worker 缺少获取响应标头
- c++ - 将结构数组从 C++ 传递到 GO
- git - Git从URI获取新分支而不将其添加为远程
- c# - 视图绑定给出了一条消息,但一切正常
- javascript - 如何让网页立即进入全屏
- android - 独特的协程 Kotlin
- google-cloud-run - 将 Cloud Run 实例连接到外部 RabbitMQ 实例 (CloudAMQP)
- google-sheets - 我可以根据位于同一文件中但在谷歌表格中的其他工作表上的单元格设置条件格式吗?
- html - 处理可能不足以容纳包装器宽度的图像
- java - 应该为 vscode 设置什么 java.testMethod 来运行 junit 测试