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

Условная колонка без apply

Вопрос

Нужна колонка "big", если amount > 1000, иначе "small". Какой вариант векторный?

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

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

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

Коротко

Правильный ответ: np.where(df["amount"] 1000, "big", "small"). np.where вычисляет маску на всей колонке и выбирает значения векторно. map с лямбдой и списковое включение вызывают Python на каждый элемент, хотя и быстрее apply(axis=1).

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

  1. df.apply(lambda r: "big" if r.amount > 1000 else "small", axis=1)
  2. df["amount"].map(lambda x: "big" if x > 1000 else "small")
  3. np.where(df["amount"] > 1000, "big", "small")правильный ответ
  4. [ "big" if x > 1000 else "small" for x in df["amount"] ]

Разбор

np.where вычисляет маску на всей колонке и выбирает значения векторно. map с лямбдой и списковое включение вызывают Python на каждый элемент, хотя и быстрее apply(axis=1). Для нескольких условий есть np.select, для интервалов pd.cut.

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

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