Pandas и DataFrame: вопросы для собеседования (часть 3)

DataFrame — основная структура данных в pandas и главный инструмент аналитика для работы с табличными данными в Python. На собеседовании проверяют фильтрацию, группировку, merge, работу с пропусками и типами данных. Часто дают датасет и просят посчитать метрику прямо в коде.

Коллекции и структуры данныхГенераторы списков и встроенные функцииЦиклы и условияИсключения и отладкаРабота с файлами: JSON и CSVФункции и аргументыИтераторы и генераторыNumPy: основыСинтаксис и типы данных

Вопросы 1115 из 20

11В `df` есть столбец `age`. Какие значения `age` попадут в результат `df[(df["age"] >= 18) & (df["age"] <= 25)]`?
AТолько 18 и 25
BТолько значения строго между 18 и 25 (19–24)
CВсе значения от 18 до 25 включительно
DВсе значения, кроме 18 и 25
Ответ: Комбинация условий через `&` дает пересечение (AND), границы `>=` и `<=` включают крайние значения.

В pandas логические операции выполняются поэлементно. Выражение `(df["age"] >= 18) & (df["age"] <= 25)` создает булеву маску, которая True только там, где оба условия выполняются одновременно. Операторы `>=` и `<=` включают 18 и 25, поэтому останутся все значения в диапазоне 18–25 включительно. Скобки важны из‑за приоритета операторов.

12Вы хотите посчитать число уникальных пользователей по дням. Что корректно описывает результат `df.groupby("day")["user_id"].nunique()`?
A`DataFrame` с колонками `day` и `user_id`, где `user_id` — список уникальных значений
B`Series`, где индекс — `day`, а значения — количество уникальных `user_id` в каждом дне
C`Series`, где индекс — `user_id`, а значения — количество дней на пользователя
DСкаляр: общее число уникальных пользователей в `df`
Ответ: `.nunique()` считает число различных значений в каждой группе и обычно возвращает `Series`.

После `df.groupby("day")` данные разбиваются по дню. Выбор колонки `"user_id"` и вызов `.nunique()` считает, сколько различных пользователей было в каждом дне. Это агрегированный результат: по одной величине на группу, поэтому тип результата — `Series` с индексом `day`.

13Что произойдет при `pd.merge(left, right, on="id", how="left")`, если в `right` для одного `id` есть несколько строк (несколько совпадений)?
AСтрока из `left` с этим `id` продублируется в результате столько раз, сколько совпадений найдено в `right`
BPandas возьмет только первое совпадение из `right`, остальные проигнорирует
CPandas всегда выбросит ошибку из‑за неоднозначности
DPandas автоматически усреднит значения из `right` и добавит одну строку
Ответ: При `JOIN`-ах возможна «размножающая» связь one-to-many: строки левой таблицы повторяются.

`.merge()` выполняет табличное соединение. Если ключ `id` в правой таблице не уникален, то для одной строки `left` найдется несколько соответствий в `right`. Тогда результат будет содержать несколько строк (декартово размножение внутри ключа): одна и та же строка `left` повторится для каждого совпадения из `right`. Это важный аналитический риск, который может «раздуть» метрики.

14Вы сделали `res = pd.merge(left, right, on="id", how="left", indicator=True)`. Как выбрать строки, для которых совпадения в `right` не нашлось?
A`res[res["_merge"] == "both"]`
B`res[res["_merge"] == "right_only"]`
C`res[res["_merge"] == "left_only"]`
D`res[res["_merge"].isna()]`
Ответ: С `indicator=True` столбец `_merge` показывает источник строки: `left_only`, `right_only` или `both`.

Параметр `indicator=True` добавляет колонку `_merge`, которая помогает диагностировать результат соединения. Для `how="left"` интересны случаи, когда строка пришла только из левой таблицы и не нашла пару в правой: это помечается как `left_only`. Такой фильтр полезен, чтобы понять, почему появились `NaN` после `.merge()` и какие ключи не матчатся.

15Зачем часто используют `as_index=False` в выражении `df.groupby("city", as_index=False)["revenue"].sum()`?
AЧтобы `sum()` работал быстрее за счет отключения индекса
BЧтобы группировка делалась по позициям строк, а не по значениям `city`
CЧтобы автоматически удалить строки с `NaN` в `revenue`
DЧтобы `city` остался обычным столбцом в результате, что удобнее для последующего `.merge()`
Ответ: `as_index=False` оставляет ключ группировки столбцом, а не индексом результата.

По умолчанию `.groupby()` делает ключ группировки индексом результирующей таблицы. С `as_index=False` pandas вернёт `DataFrame`, где `city` будет обычным столбцом. Это удобно в аналитических пайплайнах: такой результат проще объединять через `.merge()` по столбцу и проще читать без дополнительных `reset_index()`.

1234

Хотите тренировать интерактивно?

В приложении — таймер, прогресс, стрики и 1700+ вопросов по всем темам.

Тренировать в Telegram

Другие темы: Python

Коллекции и структуры данныхГенераторы списков и встроенные функцииЦиклы и условияИсключения и отладкаРабота с файлами: JSON и CSVФункции и аргументыИтераторы и генераторыNumPy: основыСинтаксис и типы данных