首页 > 解决方案 > 如何通过 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

这里看看最后一个价格行和上面代码创建的两个输出行

标签: pythonpython-3.xpandasdataframeiteration

解决方案


推荐阅读