Выбор ответа Middle Выборка и фильтрация спрашивают часто обновлено

Присваивание по условию

Вопрос

Как правильно поставить discount = 0.1 всем строкам, где amount > 1000?

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

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

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

Коротко

Правильный ответ: df.loc[df.amount 1000, "discount"] = 0.1. Присваивание должно быть одной операцией loc[маска, колонка].

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

  1. df[df.amount > 1000]["discount"] = 0.1
  2. df.where(df.amount > 1000)["discount"] = 0.1
  3. df["discount"][df.amount > 1000] = 0.1
  4. df.loc[df.amount > 1000, "discount"] = 0.1правильный ответ

Разбор

Присваивание должно быть одной операцией loc[маска, колонка]. Варианты df[маска]["discount"] = ... и df["discount"][маска] = ... это цепочное присваивание: сначала создаётся промежуточный объект, потом в него пишут. В pandas 3.0 с Copy-on-Write оно никогда не меняет df (раньше давало SettingWithCopyWarning и работало через раз). where возвращает новый DataFrame, запись в него до df не дойдёт.

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

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

Термины по теме