Мне нравится возможность составлять различные шаги с использованием поляров, потому что это делает мой код читабельным и простым в обслуживании (в отличие от цепочки методов). Обратите внимание, что в конечном итоге расчеты становятся более сложными.
Однако теперь я хочу вычислить указанный выше столбец, но сгруппированный по «компании». Я попробовал добавить .over("company") там, где это необходимо. Однако это не работает.
# Calculate Returns
R = pl.col("close").pct_change().over("company")
# Calculate Gains and Losses
G = pl.when(R > 0).then(R).otherwise(0).alias("gain")
L = pl.when(R < 0).then(R).otherwise(0).alias("loss")
# Calculate Moving Averages for Gains and Losses
window = 3
MA_G = G.rolling_mean(window).alias("MA_gain").over("company")
MA_L = L.rolling_mean(window).alias("MA_loss").over("company")
# Calculate Relative Strength Index based on Moving Averages
RSI = (100 - (100 / (1 + MA_G / MA_L))).over("company").alias("RSI")
df = df.with_columns(R, G, L, MA_G, MA_L, RSI)
df.head()
Вопросы
1.) Как лучше всего исправить ошибку «оконное выражение не разрешено при агрегации», сохраняя при этом описанный выше подход к коду?
2.) Связанный вопрос: почему оконное выражение вообще не разрешено при агрегации. В чем проблема с технической точки зрения? Может кто-нибудь объяснить мне простым языком?
Спасибо!
# Calculate Returns R = pl.col("close").pct_change()
# Calculate Gains and Losses G = pl.when(R > 0).then(R).otherwise(0).alias("gain") L = pl.when(R < 0).then(R).otherwise(0).alias("loss")
# Calculate Moving Averages for Gains and Losses window = 3 MA_G = G.rolling_mean(window).alias("MA_gain") MA_L = L.rolling_mean(window).alias("MA_loss")
# Calculate Relative Strength Index based on Moving Averages RSI = (100 - (100 / (1 + MA_G / MA_L))).alias("RSI")
df = df.with_columns(R, G, L, MA_G, MA_L, RSI)
df.head() [/code] Мне нравится возможность составлять различные шаги с использованием поляров, потому что это делает мой код читабельным и простым в обслуживании (в отличие от цепочки методов). Обратите внимание, что в конечном итоге расчеты становятся более сложными. Однако теперь я хочу вычислить указанный выше столбец, но сгруппированный по «компании». Я попробовал добавить .over("company") там, где это необходимо. Однако это не работает. [code]# Calculate Returns R = pl.col("close").pct_change().over("company")
# Calculate Gains and Losses G = pl.when(R > 0).then(R).otherwise(0).alias("gain") L = pl.when(R < 0).then(R).otherwise(0).alias("loss")
# Calculate Moving Averages for Gains and Losses window = 3 MA_G = G.rolling_mean(window).alias("MA_gain").over("company") MA_L = L.rolling_mean(window).alias("MA_loss").over("company")
# Calculate Relative Strength Index based on Moving Averages RSI = (100 - (100 / (1 + MA_G / MA_L))).over("company").alias("RSI")
df = df.with_columns(R, G, L, MA_G, MA_L, RSI)
df.head() [/code] [b]Вопросы[/b] 1.) Как лучше всего исправить ошибку «оконное выражение не разрешено при агрегации», сохраняя при этом описанный выше подход к коду? 2.) Связанный вопрос: почему оконное выражение вообще не разрешено при агрегации. В чем проблема с технической точки зрения? Может кто-нибудь объяснить мне простым языком? Спасибо!