Как применитьroll_map() в Polars для функции, которая использует несколько входных столбцовPython

Программы на Python
Ответить
Anonymous
 Как применитьroll_map() в Polars для функции, которая использует несколько входных столбцов

Сообщение Anonymous »

У меня есть функция, использующая полярные выражения для расчета стандартного отклонения остатков от линейной регрессии (любезно предоставлено этим сообщением).
Теперь я хотел бы применить эту функцию, используя скользящее окно к кадру данных. Мои подходы, описанные ниже, терпят неудачу, потому что я не знаю, как передать два столбца в качестве аргументов функции, посколькуroll_map() применяется к Expr.
Есть ли способ сделать это непосредственно в Polars или мне нужно использовать обходной путь с Pandas? Спасибо за вашу поддержку! (кажется, я упускаю что-то очевидное...)
import polars as pl

def ols_residuals_std(x: pl.Expr, y: pl.Expr) -> pl.Expr:
# Calculate linear regression residuals and return the standard deviation thereof
x_center = x - x.mean()
y_center = y - y.mean()
beta = x_center.dot(y_center) / x_center.pow(2).sum()
e = y_center - beta * x_center
return e.std()

df = pl.DataFrame({'a': [45, 76, 4, 88, 66, 5, 24, 72, 93, 87, 23, 40],
'b': [77, 11, 56, 43, 61, 25, 63, 7, 66, 17, 64, 75]})

# Applying the function over the full length - works
df = df.with_columns(ols_residuals_std(pl.col('a'), pl.col('b')).alias('e_std'))

df.with_columns(pl.col('a').rolling_map(ols_residuals_std(pl.col('a'), pl.col('b')), window_size=4, min_periods=1).alias('e_std_win'))
# PanicException: python function failed: PyErr { type: , value: TypeError("'Expr' object is not callable"), traceback: None }

df.with_columns(pl.col('a', 'b').rolling_map(ols_residuals_std(), window_size=4, min_periods=1).alias('e_std_win'))
# TypeError: ols_residuals_std() missing 2 required positional arguments: 'x' and 'y'


Подробнее здесь: https://stackoverflow.com/questions/774 ... -input-col
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»