Есть events со столбцами user_id, event, ts и таблица users со столбцом user_id. Нужно посчитать число покупок (event == "purchase") в 2025 году на пользователя и присоединить к users, сохранив всех пользователей. Какой вариант корректен?
A
p = events[events["event"] == "purchase"].groupby("user_id").size(); result = pd.merge(users, p, on="user_id", how="inner")B
p = events[(events["event"] == "purchase") & (events["ts"].dt.year == 2025)].groupby("user_id").count(); result = users.merge(p, on="user_id", how="left")C
p = events.groupby("user_id").size().reset_index(name="purchase_cnt"); result = users.merge(p, on="user_id", how="left")D
p = events[(events["event"] == "purchase") & (events["ts"].dt.year == 2025)].groupby("user_id").size().reset_index(name="purchase_cnt"); result = users.merge(p, on="user_id", how="left")Правильный ответ. Типичный пайплайн: фильтрация →
.groupby().size() → reset_index → .merge(..., how="left").Разбор
Сначала нужно отфильтровать события по типу и периоду через булевую индексацию. Затем агрегировать по user_id, удобный счетчик покупок — .size(), который считает строки в группе. Чтобы результат был табличным и легко объединялся, делают reset_index(name="purchase_cnt"). Наконец, .merge(..., how="left") сохраняет всех пользователей из users, добавляя им счетчик покупок (у пользователей без покупок значение станет NaN, которое при необходимости можно заменить на 0).
Проверь себя · 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» →