Сумму и крайние даты получите groupby-агрегацией, а предыдущую выручку — shift внутри группы после сортировки покупок по времени. При одинаковых датах нужен стабильный дополнительный порядок.
Выручка, крайние даты и предыдущая покупка через groupby
Сумму и крайние даты получите groupby-агрегацией, а предыдущую выручку — shift внутри группы после сортировки покупок по времени. При одинаковых датах нужен стабильный дополнительный порядок.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Посчитать общую сумму выручки (revenue) для каждого пользователя
Для каждого пользователя найти его первую и последнюю дату покупки
Добавить в датафрейм новый столбец prev_revenue, который содержит выручку за предыдущую покупку этого же пользователя (сдвиг внутри группы). Если предыдущей нет, ставим NaN
Ответ
Сумму и крайние даты получите groupby-агрегацией, а предыдущую выручку — shift внутри группы после сортировки покупок по времени. При одинаковых датах нужен стабильный дополнительный порядок.
Пусть колонки называются user_id, purchase_date, purchase_id и revenue; purchase_id различает покупки с одинаковым временем. При иных именах замените их в примере.
import pandas as pd
work = df.copy()
work['purchase_date'] = pd.to_datetime(work['purchase_date'])
work = work.sort_values(['user_id', 'purchase_date', 'purchase_id'])
work['prev_revenue'] = work.groupby('user_id')['revenue'].shift(1)
summary = work.groupby('user_id').agg(
total_revenue=('revenue', 'sum'),
first_purchase=('purchase_date', 'min'),
last_purchase=('purchase_date', 'max'),
)
В work находятся покупки с prev_revenue, в summary — итог на пользователя. Заранее определите правила для пропусков и возвратов; денежные суммы желательно хранить в минимальных целых единицах.