Выбор ответа 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) по умолчанию идёт по колонкам…
Варианты ответа
df.apply(lambda r: r.qty * r.price, axis=1)df["qty"] * df["price"]правильный ответ- Цикл
for i, r in df.iterrows() df[["qty", "price"]].apply(np.prod)
Разбор
Умножение колонок векторизовано: цикл идёт внутри NumPy на C, это быстрее apply(axis=1) в сотни раз. apply(axis=1) и iterrows вызывают Python на каждую строку и создают объект Series на строку. apply(np.prod) по умолчанию идёт по колонкам и вернёт произведение всей колонки, а не построчное.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Производительность и память»
- Цепочное присваивание в pandas 3.0
- Обнулить тестовые заказы через loc
- Скидка по категории через map
- Категории сумм через np.select
- Ужать DataFrame: category и downcast
- category теряется при concat
- Copy-on-Write в pandas 3.0
- Copy-on-Write: изменение колонки