【问题标题】:How to speed up iterations over rows of a dataframe如何加快对数据框行的迭代
【发布时间】:2014-04-27 01:37:14
【问题描述】:

试过 iterrows() 很慢,在别处读 zip 会更好,但还是很慢。

我尝试搜索数据框的行,生成一些统计信息来填充两个新的数据框。

有什么建议可以加快数据帧的搜索速度吗?

代码 sn-ps:

for index,date,stocknum in zip(stockpicks.index.values,stockpicks.date.values,stockpicks.stocknum.values):

        stock=readStockPrice(stocknum)
        if stock.empty:
            return print("error - empty frame")
        stock=stock.ix[trading_days]
        stockprice=stock.Close.values
        p0_date=trading_days.get_loc(date)


        p0=stockprice[p0_date]
        stock_pct_change={('d'+str(d)):stockprice[p0_date+d]/p0*100.0 if (p0_date+d)< len(trading_days) else np.nan for d in days }

        b0=hsi[p0_date]
        benchmark_pct_change={('d'+str(d)):hsi[p0_date+d]/b0*100.0 if (p0_date+d)< len(trading_days) else np.nan for d in days }

        for d in days:
            stock_analysis.loc[index,'d'+str(d)]=stock_pct_change['d'+str(d)]
            benchmark_analysis.loc[index,'d'+str(d)]=benchmark_pct_change['d'+str(d)]

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    您的问题似乎可以完全矢量化。像您正在做的迭代和索引是最慢的方法。

    In [6]: df = DataFrame(np.random.randint(-5,5,size=20).reshape(5,4),columns=list('abcd'),index=date_range('20130101',periods=5))+50.0
    
    In [7]: df.pct_change()
    Out[7]: 
                       a         b         c         d
    2013-01-01       NaN       NaN       NaN       NaN
    2013-01-02  0.108696  0.108696  0.102041  0.086957
    2013-01-03 -0.058824 -0.039216 -0.074074 -0.060000
    2013-01-04  0.104167  0.081633 -0.020000  0.000000
    2013-01-05 -0.075472 -0.113208  0.061224 -0.021277
    
    [5 rows x 4 columns]
    

    【讨论】:

    • 杰夫,谢谢您的回答。但是,您可能错过了我的问题的重点。我的代码不打算计算股票报价矩阵的 pct-change,它首先必须在 stockpicks df 中搜索股票和感兴趣的日期,从存储的 csv 中检索相关的股票报价,并计算 pct_change 天[1,2,5,10,20,30...250]。所以,我必须迭代选股行(搜索)并索引关注的股票价格。
    猜你喜欢
    • 2021-09-17
    • 1970-01-01
    • 2021-01-13
    • 2022-01-16
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2022-09-22
    • 2013-10-23
    相关资源
    最近更新 更多