df есть столбцы user_id и amount. Что вернёт выражение df.groupby("user_id")["amount"].sum()?DataFrame — основная структура данных в pandas и главный инструмент аналитика для работы с табличными данными в Python. На собеседовании проверяют фильтрацию, группировку, merge, работу с пропусками и типами данных. Часто дают датасет и просят посчитать метрику прямо в коде.
Всего в этом разделе 20 вопросов. Каждый — с правильным ответом и кратким разбором теории. Разбито на 4 части по 5 вопросов.
Внутреннее выражение `df["price"] > 100` формирует булеву `Series` той же длины, что и `DataFrame`. Когда вы пишете `df[маска]`, `pandas` оставляет только те строки, где маска равна `True`, а столбцы возвращает все. Это и есть булева индексация: результатом будет `DataFrame` с теми же столбцами, что были у `df`, но с отфильтрованными строками. Возвращается именно `DataFrame`, а не `Series` и не сама маска: исходный индекс строк сохраняется, если явно не вызвать `reset_index()`.
Подробный разбор →В `pandas` выражения `df["col"]` и `df.loc[:, "col"]` возвращают `Series`, потому что выбирается один столбец как одномерный объект. А `df[["col"]]` передаёт список столбцов, поэтому результат — всегда `DataFrame`, что удобно для последующих `.merge()` или сохранения формы данных. Выражение `df.iloc[:, 0]` тоже даст `Series`, потому что обращается к одному столбцу по позиции.
Подробный разбор →При `how="left"` левая таблица — это `orders`, поэтому каждая строка заказа попадёт в результат. Для каждого заказа `pandas` пытается найти строку в `customers` с тем же `customer_id`. Если совпадения нет, колонки из `customers` заполняются `NaN`. Это типичный паттерн для обогащения фактов (заказов) атрибутами (клиентов). Дубликаты по ключу автоматически не удаляются — они приведут к размножению строк.
Подробный разбор →Метод `df["status"].isin([...])` возвращает булеву `Series`: True для строк, где значение входит в указанный набор. Оператор `~` инвертирует маску: True становится False и наоборот. Поэтому выражение `df[~df["status"].isin([...])]` оставляет строки, где статус не равен ни одному элементу списка. Важно: `NaN` сюда не попадёт автоматически — `.isin()` для `NaN` возвращает False, а после инверсии — True.
Подробный разбор →Выражение `df["col"] > 0` сравнивает значения одного столбца и возвращает булеву `Series` (один элемент на строку). Когда эту `Series` используют как индексатор `df[mask]`, pandas выбирает строки, где маска равна `True`. Так обычно строится фильтрация данных в `DataFrame` без циклов и явного перебора строк.
Подробный разбор →В приложении — таймер, прогресс, стрики и 1700+ вопросов по всем темам.
Тренировать Python в Telegram