代码之家  ›  专栏  ›  技术社区  ›  BYZZav

dataframe apply()真的比dataframe itertuples()慢吗?

  •  1
  • BYZZav  · 技术社区  · 7 年前

    我有一个时间+OHLC值的数据集。我想计算每行的范围。我的数据集有400万行。

    我有两种方法。

    1) df.apply

    df['range'] = df[['high', 'low', 'open']].apply (lambda row: (row.high 
    - row.low) * (10000 / row.open), axis=1)
    

    2) df.itertuples

    def calc_range(df):
       displacement = []
       for row in df.itertuples():
            displacement.append((row.high - row.low) * (10000 / row.open))
       return displacement
    
    df['range'] = calc_range(df)
    

    接近1:55秒

    接近2:6秒

    我一直认为apply比使用for循环遍历数据帧更快。但似乎我错了。

    我想知道两件事- 1)是否有方法优化此应用代码? 2)对于非常大的数据帧,迭代速度是否更快?

    非常感谢

    0 回复  |  直到 7 年前