У меня есть набор данных с N-числом учетных записей в месяц, и я хочу вычислить сумму данных за последние 12 месяцев для этой учетной записи и создать столбец с ней. Я использую следующий код:
partition_window = Window.partitionBy('ACCOUNT_NO').orderBy(f.col('DATE'))
df = df.withColumn('SUM_BALANCE_OF_LAST_12_MONTHS',
f.lag(f.col(balance_variable), 1, 0).over(partition_window) + f.lag(f.col(balance_variable), 2, 0).over(partition_window)
+ f.lag(f.col(balance_variable), 3, 0).over(partition_window) + f.lag(f.col(balance_variable), 4, 0).over(partition_window)
+ f.lag(f.col(balance_variable), 5, 0).over(partition_window) + f.lag(f.col(balance_variable), 6, 0).over(partition_window)
+ f.lag(f.col(balance_variable), 7, 0).over(partition_window) + f.lag(f.col(balance_variable), 8, 0).over(partition_window)
+ f.lag(f.col(balance_variable), 9, 0).over(partition_window) + f.lag(f.col(balance_variable), 10, 0).over(partition_window)
+ f.lag(f.col(balance_variable), 11, 0).over(partition_window) + f.lag(f.col(balance_variable), 12, 0).over(partition_window)).orderBy('DATE', 'ACCOUNT_NO')
balance_variable - это столбец переменного баланса с фрейма данных df.
Мой вопрос:
Есть ли способ улучшить этот код потому что это кажется довольно медленным. Я знаю, что оконные функции могут быть довольно медленными, и теперь я понимаю, почему ...
Ищу любые улучшения, которые я могу сделать.