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

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

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

Вопросы 610 из 20

6В `df` есть столбцы `user_id` и `amount`. Что вернёт выражение `df.groupby("user_id")["amount"].sum()`?
A`DataFrame` со столбцами `user_id` и `amount` по одной строке на каждого пользователя
B`Series` с индексом из значений `user_id` и значениями сумм `amount` по каждому ключу
CСкаляр: общая сумма `amount` по всей таблице без какой-либо разбивки по `user_id`
D`DataFrame` с `MultiIndex` по строкам и колонкам с уровнем `user_id` дважды подряд
Ответ: Выбор одного столбца после `.groupby()` обычно ведёт к `Series` после агрегации, а не к `DataFrame`.

Конструкция `df.groupby("user_id")["amount"]` выбирает один столбец `amount` внутри групп и возвращает объект, который при агрегации `sum()` даёт `Series`. Индексом этой `Series` будут значения ключа группировки `user_id`, а значениями — суммы `amount` внутри каждой группы. Если нужен именно `DataFrame` с двумя столбцами, обычно добавляют `reset_index()`. Скаляр получился бы только при `df["amount"].sum()` без группировки.

Подробный разбор →
7Что вернёт вызов `df.mean(numeric_only=True)` для числовых столбцов в `DataFrame` `df`?
A`DataFrame` той же формы, что у `df`, с заменой исходных значений на средние по столбцу
BСкаляр: одно число, представляющее среднее значение по всем числовым ячейкам сразу
C`Series` с индексом из имён числовых столбцов и значениями средних по каждому из них
DСписок средних значений по столбцам без меток индекса в порядке исходных колонок
Ответ: Многие агрегаты по умолчанию считаются по столбцам и возвращают `Series` с метками колонок.

Вызов `df.mean(...)` агрегирует по оси столбцов, считая среднее в каждом числовом столбце отдельно. Результат — `Series`: индекс — названия числовых колонок, значения — их средние. Это удобный способ быстро получить «профиль» числовых признаков. Чтобы получить одно число по всей таблице, нужно сначала свести её, например `df.to_numpy().mean()`.

Подробный разбор →
8В чём смысл параметров в `pd.merge(df_left, df_right, left_on="sku", right_on="product_sku", how="inner")`?
APandas будет искать совпадения по двум столбцам одновременно: `sku` и `product_sku` в обеих таблицах
BОбъединение будет выполнено по индексам `df_left` и `df_right`
CБудут использованы только значения `df_left["sku"]`, а `df_right` просто добавится по порядку строк
DСтроки будут сопоставляться по равенству `df_left["sku"]` и `df_right["product_sku"]`
Ответ: `left_on`/`right_on` нужны, когда названия ключевых столбцов различаются.

Параметры `left_on` и `right_on` явно задают, какие колонки сравнивать для построения соответствий между строками. В примере ключ в левой таблице называется `sku`, а в правой — `product_sku`. `how="inner"` означает, что в результат попадут только пары строк, где ключи совпали.

Подробный разбор →
9У вас есть `s = df.groupby("user_id").size()`. Что нужно сделать, чтобы получить таблицу `DataFrame` с колонками `user_id` и `cnt` для дальнейшего объединения через `.merge()`?
A`s.reset_index(name="cnt")` для превращения индекса в колонку с именем счётчика
B`s.to_frame("cnt")` для получения таблицы с одной колонкой счётчика без ключа
C`s.rename("cnt").to_dict()` для словаря с ключами по `user_id` и значениями-числами
D`s.values.reshape(-1, 1)` для двумерного массива значений без ключевого столбца
Ответ: Метод `.size()` возвращает `Series`, а `reset_index(...)` превращает агрегат в табличный `DataFrame` с колонкой-ключом.

После `groupby(...).size()` вы получаете объект `Series`, где индекс — это ключ группировки `user_id`, а значения — количество строк в группе. Для соединений через `.merge()` чаще удобнее иметь явный столбец с ключом, поэтому применяют `reset_index(name="cnt")`: индекс превратится в колонку `user_id`, а вторая колонка получит имя `cnt`. Альтернативы вроде `to_dict` или преобразования в массив теряют табличную структуру, нужную для `.merge()`.

Подробный разбор →
10В `DataFrame` `df` есть столбцы `country`, `user_id`, `revenue`. Что вернёт выражение `df.loc[df["country"] == "RU", ["user_id", "revenue"]]`?
A`DataFrame` со строками, где `country == "RU"`, и только столбцами `user_id` и `revenue` из исходного набора данных.
B`Series` со значениями `revenue` только для строк, где `country == "RU"`, без других столбцов исходного `DataFrame`.
CБулеву маску типа `Series` для столбца `country`, которую затем нужно отдельно применить к `DataFrame` `df`.
D`DataFrame` со всеми строками, но с `NaN` в `revenue` и `user_id` для всех стран, кроме `"RU"`, без удаления строк.
Ответ: `.loc` позволяет одновременно выбрать строки по условию и нужные столбцы, возвращая `DataFrame`.

В `df.loc[строки, столбцы]` первый аргумент отвечает за выбор строк, второй — за выбор столбцов. Условие `df["country"] == "RU"` даёт булеву `Series`, которая фильтрует строки. Список столбцов `["user_id", "revenue"]` ограничивает набор колонок, поэтому результатом будет `DataFrame`, а не `Series`.

Подробный разбор →
1234

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

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

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

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

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