Как работают groupby и merge в pandas и какие у них ловушки?
- Чем 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 по индексу
Подробно
Именованные агрегаты (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.
- Проверка результата.
Проверьте себя
Несколько верных вариантов. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗merge по умолчанию делает левое соединение и сохраняет все строки левой таблицы
- ✓Дубли ключа в merge размножают строки
- ✓groupby по умолчанию отбрасывает NaN-ключи
- ✓Разные типы ключей (строка и число) ломают соединение
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.