У меня есть фрейм данных, который выглядит следующим образом. Не у всех клиентов были зарегистрированы покупки в каждой комбинации года и месяца. Я хочу повторить и суммировать покупки, сделанные за последние 3 месяца, 6 месяцев и 12 месяцев.
Я не могу вставить новые строки за пропущенные месяцы, так как мой набор данных очень большой.
Вещи, которые я пробовал а) Конвертировать год и месяц в дату б) Использовать сумму и случай, когда это не сработало. c) Использовал итерацию по строкам для суммирования, но дата, которую я создал, была меткой времени и вычитала в день, давая ошибки.
Ввод
Customer_ID, Purchase_Year, Purchase_Month, Purchases
1 2019 1 4
1 2019 2 6
1 2019 3 4
1 2019 4 2
2 2019 1 2
2 2019 5 3
3 2019 1 9
Ожидаемый вывод
Customer_ID, Purchase_Year, Purchase_Month, Purchases, L3M
1 2019 1 4 4
1 2019 2 6 10
1 2019 3 4 14
1 2019 4 2 12
2 2019 1 2 2
2 2019 5 3 3
3 2019 1 9 9
Моя первоначальная попытка, которая работает (но не для пропущенных строк)
sqlContext.sql("""select *, sum(Purchases) over (partition by customer_id
order by Purchase_Year, Purchase_Month
rows between 3 preceding and current row) as total_s
from customer""").show()