Выбор ответа Middle groupby и агрегаты обновлено

Топ-N в группе без apply

Вопрос

Как быстро получить два самых дорогих заказа в каждом городе?

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

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

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

Коротко

Правильный ответ: df.sortvalues("amount", ascending=False).groupby("city").head(2). Сначала сортировка по убыванию, затем head(2) в каждой группе: векторизованно и без Python-вызова на группу. max не принимает число строк. agg("nlargest") не сработает: агрегат должен вернуть одно значение. head(2) до сортировки возьмёт…

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

  1. df.groupby("city")["amount"].max(2).reset_index()
  2. df.groupby("city")["amount"].agg("nlargest", n=2)
  3. df.groupby("city").head(2).sort_values("amount", ascending=False)
  4. df.sort_values("amount", ascending=False).groupby("city").head(2)правильный ответ

Разбор

Сначала сортировка по убыванию, затем head(2) в каждой группе: векторизованно и без Python-вызова на группу. max не принимает число строк. agg("nlargest") не сработает: агрегат должен вернуть одно значение. head(2) до сортировки возьмёт первые две строки в исходном порядке, а не самые дорогие.

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

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

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