Число заказов на покупателя и дни от регистрации до первого заказа
users(user_id, join_date, favorite_brand) и orders(order_id, order_date, item_id, buyer_id, seller_id). Для каждого покупателя верните buyer_id, delta_days_first_purchase (дни между его join_date и самым ранним заказом) и cnt_orders (его суммарное число заказов).
import pandas as pd
def market_analysis(users: pd.DataFrame, orders: pd.DataFrame) -> pd.DataFrame:
# ваш код здесь
Напишите реализацию.
Агрегируют заказы на покупателя, затем подтягивают дату регистрации. Группируют orders по buyer_id для даты первого заказа (min(order_date)) и числа заказов (size), объединяют это с users по buyer_id == user_id и считают delta_days = (first_order - join_date).dt.days.
- ✗Использовать последний заказ вместо первого для дельты
- ✗Считать строки пользователей вместо строк заказов
- ✗Выдавать дельты по заказам вместо одной на покупателя
- →Зачем агрегировать заказы до объединения с users?
- →Как покупатель без заказов появится в выводе?
Reduce orders to one row per buyer (first date and count), then merge in the join date and subtract.
import pandas as pd
def market_analysis(users: pd.DataFrame, orders: pd.DataFrame) -> pd.DataFrame:
agg = (orders.groupby('buyer_id')
.agg(first_order=('order_date', 'min'),
cnt_orders=('order_id', 'size'))
.reset_index())
m = agg.merge(users, left_on='buyer_id', right_on='user_id')
m['delta_days_first_purchase'] = (m['first_order'] - m['join_date']).dt.days
return m[['buyer_id', 'delta_days_first_purchase', 'cnt_orders']]
The first order date and the order count both come from one grouping of the orders table; merging with users on the buyer key brings in join_date so the day delta can be computed. Using the latest order or counting user rows would answer a different question.