Разделите на сумму остатков на счетах за последние 12 месяцев с f.lag (в поисках улучшения) - PullRequest
0 голосов
/ 30 января 2020

У меня есть набор данных с 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.

Мой вопрос:

Есть ли способ улучшить этот код потому что это кажется довольно медленным. Я знаю, что оконные функции могут быть довольно медленными, и теперь я понимаю, почему ...

Ищу любые улучшения, которые я могу сделать.

...