Получить доступ

Как работают groupby и merge в pandas и какие у них ловушки?

JuniorPython и pandaspandas
Ещё спрашивают так:
  • Чем merge отличается от join и concat в pandas?
Коротко

groupby — разбить, применить агрегат, собрать (split-apply-combine): df.groupby("city")["amount"].agg(["sum", "mean"]). merge — соединение таблиц по ключам, как SQL JOIN (how="left", on=). Ловушки: размножение строк при дублях ключа, NaN-ключи отбрасываются в groupby по умолчанию, типы ключей не совпадают (строка и число).

  • merge(..., validate="many_to_one") проверяет кратность связи
  • indicator=True показывает, из какой таблицы пришла строка
  • groupby(..., dropna=False) — не терять группу с пропущенным ключом

А ещё concat склеивает таблицы по строкам или столбцам, join — merge по индексу

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Именованные агрегаты (agg(revenue=("amount", "sum"))) дают читаемые столбцы без мультииндекса.

transform возвращает результат той же длины, что исходная таблица: df["share"] = df["amount"] / df.groupby("user_id")["amount"].transform("sum") — аналог оконной функции.

Ловушки merge:

  • дубли ключа в правой таблице размножают строки — validate ловит это сразу;
  • ключ user_id как int в одной таблице и str в другой — пустой результат без ошибки;
  • одинаковые имена столбцов получают суффиксы _x, _y;
  • после left merge строки без пары имеют NaN, и целочисленные столбцы превращаются в float.

Проверка после соединения: сравнить число строк до и после, посмотреть indicator и долю left_only.

Пример

orders.merge(users, on="user_id", how="left",
             validate="many_to_one", indicator=True)

(orders
   .groupby(["city", "month"], dropna=False)
   .agg(revenue=("amount", "sum"),
        buyers=("user_id", "nunique"),
        median_check=("amount", "median"))
   .reset_index())

Что хотят услышать

  • Принцип split-apply-combine, agg и transform.
  • Типы соединений и validate.
  • Проверка результата.

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем