Выбор ответа Junior Производительность и память спрашивают часто обновлено

Чем заменить apply(axis=1)

Вопрос

Как быстрее всего посчитать total = qty * price для 10 млн строк?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: df["qty"] df["price"]. Умножение колонок векторизовано: цикл идёт внутри NumPy на C, это быстрее apply(axis=1) в сотни раз. apply(axis=1) и iterrows вызывают Python на каждую строку и создают объект Series на строку. apply(np.prod) по умолчанию идёт по колонкам…

Варианты ответа

  1. df.apply(lambda r: r.qty * r.price, axis=1)
  2. df["qty"] * df["price"]правильный ответ
  3. Цикл for i, r in df.iterrows()
  4. df[["qty", "price"]].apply(np.prod)

Разбор

Умножение колонок векторизовано: цикл идёт внутри NumPy на C, это быстрее apply(axis=1) в сотни раз. apply(axis=1) и iterrows вызывают Python на каждую строку и создают объект Series на строку. apply(np.prod) по умолчанию идёт по колонкам и вернёт произведение всей колонки, а не построчное.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.