Выбор ответа Middle merge, join и concat спрашивают часто обновлено

Анти-джойн в pandas

Вопрос

Как найти заказы, у которых user_id нет в таблице users?

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

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

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

Коротко

Правильный ответ: orders[orders["userid"].isin(users["userid"])]. Отрицание isin оставляет строки, ключа которых нет справа: это анти-джойн.

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

  1. orders.merge(users, on="user_id", how="inner")
  2. orders[orders["user_id"].isin(users["user_id"])]
  3. orders.merge(users, how="cross")
  4. orders[~orders["user_id"].isin(users["user_id"])]правильный ответ

Разбор

Отрицание isin оставляет строки, ключа которых нет справа: это анти-джойн. Без тильды получим, наоборот, заказы с клиентом, как и при inner. cross строит все пары строк и к задаче не относится. Альтернатива: merge(how="left", indicator=True) и фильтр _merge == "left_only".

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

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