Выбор ответа Junior groupby и агрегаты спрашивают часто обновлено

groupby: agg или transform

Вопрос

Нужно добавить к каждой строке заказов колонку с суммой заказов её клиента, не меняя число строк. Что выбрать?

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

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

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

Коротко

Правильный ответ: df.groupby("user")["amount"].transform("sum"). transform возвращает результат той же длины и с тем же индексом, что исходный DataFrame, поэтому его можно сразу присвоить в колонку. agg("sum") и .sum() дают одну строку на клиента: присвоение в колонку выровняет по индексу и даст NaN или…

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

  1. df.groupby("user")["amount"].transform("sum")правильный ответ
  2. df.groupby("user")["amount"].agg("sum")
  3. df.groupby("user")["amount"].sum()
  4. df.groupby("user").filter(lambda g: g["amount"].sum())

Разбор

transform возвращает результат той же длины и с тем же индексом, что исходный DataFrame, поэтому его можно сразу присвоить в колонку. agg("sum") и .sum() дают одну строку на клиента: присвоение в колонку выровняет по индексу и даст NaN или неверные значения. filter оставляет или выкидывает группы целиком, он не считает суммы.

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

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

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