Есть events со столбцами user_id, event, ts и таблица users со столбцом user_id. Нужно посчитать число покупок (event == 'purchase') за 2025 год по пользователю и присоединить к users, сохранив всех пользователей. Какой вариант корректен?
AФильтр
event == 'purchase', агрегация groupby('user_id').size(), reset_index и merge(..., how='inner') без фильтра по годуBФильтр по типу события и
dt.year == 2025, groupby('user_id').size(), reset_index(name='purchase_cnt'), merge(..., how='left')CФильтр по типу события и году,
groupby('user_id').count() без reset_index, далее merge(..., how='left') к таблице usersDБез фильтра по типу события и без года:
groupby('user_id').size(), reset_index(name='purchase_cnt'), merge(..., how='left')Правильный ответ. Типичный пайплайн: фильтрация →
.groupby().size() → reset_index → .merge(..., how='left').Разбор
Сначала события фильтруются по типу и периоду через булеву индексацию. Затем агрегируют по user_id — удобный счётчик строк в группе даёт .size(). Чтобы результат стал плоским и легко мерджился, делают reset_index(name='purchase_cnt'). Наконец, .merge(..., how='left') сохраняет всех пользователей из users, добавляя счётчик покупок (у пользователей без покупок будет NaN, его при необходимости заменяют на 0). Варианты с inner, без фильтра или без reset_index ломают одно из этих требований.
Проверь себя · 1/3разбор после ответа
Что вернёт выражение
df[df["price"] > 100]?Ещё вопросы по теме «Pandas и DataFrame»
- Что вернёт выражение `df[df["price"] > 100]`?
- В `DataFrame` `df` есть столбцы `country`, `user_id`, `revenue`. Что вернёт выражение `df.loc[df["country"] == "RU", ["user_id", "revenue"]]`?
- В `df` есть столбец `age`. Какие значения `age` попадут в результат `df[(df["age"] >= 18) & (df["age"] <= 25)]`?
- Что выберет фильтр `df[~df["status"].isin(["cancelled", "returned"])]`?
- Что верно про два шага: `mask = df["col"] > 0` и затем `df[mask]`?
- Все вопросы по «Pandas и DataFrame» →