У меня есть набор данных времени + значения OHLC.Я хочу рассчитать диапазон каждой строки.В моем наборе данных 4 миллиона строк.
У меня есть два подхода.
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 секунд
Я всегда считал, что применение быстрее, чем итерация по циклу данных с циклом for.Но, похоже, я ошибаюсь.
Мне интересно две вещи: 1) Есть ли способ оптимизировать этот код?2) Итерация быстрее для очень больших фреймов данных?
Большое спасибо