У меня есть задача, в которой я хочу выполнить регрессию преобразованных столбцов для набора указанных столбцов в кадре данных Polars. Преобразование и набор независимых столбцов управляются спецификацией.
Ниже приведен упрощенный мини-пример для иллюстрации.
InvalidOperationError: window expression not allowed in aggregation
Не знаю, почему over не поддерживается в контексте агрегации. Было бы очень удобно, если бы это было так, как в моем примере.
Итак, мой реальный вопрос: как с этим справиться в моем конкретном случае? И, если с этим невозможно справиться, есть ли альтернативные способы заставить мой код работать систематически?
У меня есть задача, в которой я хочу выполнить регрессию преобразованных столбцов для набора указанных столбцов в кадре данных Polars. Преобразование и набор независимых столбцов управляются спецификацией. Ниже приведен упрощенный мини-пример для иллюстрации. [code]from functools import partial
import polars as pl import numpy as np
def ols_fitted(s: pl.Series, yvar: str, xvars: list[str]) -> pl.Series: df = s.struct.unnest() y = df[yvar].to_numpy() X = df[xvars].to_numpy() fitted = np.dot(X, np.linalg.lstsq(X, y, rcond=None)[0]) return pl.Series(values=fitted, nan_to_null=True)
df.with_columns( pl.struct( ( pl.col(specs[specnm]["yvar"]) - pl.col(specs[specnm]["yvar"]).mean().over(specs[specnm]["gvars"]) ).abs(), *specs[specnm]["xvars"], ) .map_elements( partial( ols_fitted, yvar=specs[specnm]["yvar"], xvars=specs[specnm]["xvars"] ) ) .over("date", "id") .alias(f"fitted_{specnm}") for specnm in list(specs.keys()) ) [/code] Однако я получил следующую ошибку: [code]InvalidOperationError: window expression not allowed in aggregation [/code] Не знаю, почему over не поддерживается в контексте агрегации. Было бы очень удобно, если бы это было так, как в моем примере. Итак, мой реальный вопрос: как с этим справиться в моем конкретном случае? И, если с этим невозможно справиться, есть ли альтернативные способы заставить мой код работать систематически?