Действительно ли dataframe apply () медленнее, чем dataframe itertuples ()? - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть набор данных времени + значения 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) Итерация быстрее для очень больших фреймов данных?

Большое спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...