Выручка, крайние даты и предыдущая покупка через groupby

Сумму и крайние даты получите groupby-агрегацией, а предыдущую выручку — shift внутри группы после сортировки покупок по времени. При одинаковых датах нужен стабильный дополнительный порядок.

Короткий ответ

Что ответить на собеседовании

Сумму и крайние даты получите 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 — итог на пользователя. Заранее определите правила для пропусков и возвратов; денежные суммы желательно хранить в минимальных целых единицах.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее