Я пытаюсь рассчитать индикатор RSI. Для этого мне нужны скользящие средние прибыли и потери.
Я хотел бы рассчитать скользящее среднее значение, игнорируя нулевые значения. Таким образом, среднее значение будет рассчитываться по сумме и учитывать существующие значения.
Пример:
window_size = 5
df = DataFrame(price_change: { 1, 2, 3, -2, 4 })
df_gain = .select(
pl.when(pl.col('price_change') > 0.0)
.then(pl.col('price_change'))
.otherwise(None)
.alias('gain')
)
# UNKOWN HOW TO GET WANTED RESULT:
rol_mean_gain = df_gain.select(
pl.col('gain').rolling_mean(window_size=window_size, ignore_null=True)
)
Чтобы вычислить rol_mean_gain: [1, 2, 3, skip, 4] / 4 (not 5)
Я знаю, что у Панд есть .mean(skipna=True)
или .apply(pandas.np.nanmean)
Но, насколько мне известно, у polars такого API нет.
Я думаю, подразумевается пропуск нулей, см. min_periods
описание в документации для этого метода.
df_gain.select(pl.col('gain').rolling_mean(window_size=window_size, min_periods=1))
Дает мне столбец 1.0, 1.5, 2.0, 2.0, 2.5
. Обратите внимание, как последние два столбца правильно пропускают нуль.
Спасибо! Получил самые точные результаты, используя
min_periods=0