Я хочу использовать окно, которое вычисляет среднее значение за последние 5 результатов перед текущим результатом.
Например, если у меня есть фрейм данных с результатами, mean_last_5
будет выглядеть следующим образом:
Result Mean_last_5
1. 4 NaN
2. 2 NaN
3. 6 NaN
4. 3 NaN
5. 2 NaN
6. 6 3.4
7. 3 3.8
Шестая строка будет рассчитываться как: (4+2+6+3+2)/5 = 3.4
.
Так что в терминах Панд я бы катал окно 5 со сдвигом 1.
С PySpark я просто не могу понять, как это сделать. Текущий код:
def mean_last_5(df):
window = Window.partitionBy('Id').orderBy('year').rangeBetween(Window.currentRow-5, Window.currentRow)
return df.withColumn('mean_last_5', sf.avg('result').over(window))
Ошибка:
не удается разрешить из-за несоответствия типов данных: рамка окна диапазона с границами значений не может использоваться в спецификации окна с множественным порядком в выражениях: