Как реализовать скользящее среднее, игнорируя нулевые значения

Я пытаюсь рассчитать индикатор 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 нет.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
5
0
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, подразумевается пропуск нулей, см. 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

Joris Medeišis 12.04.2023 22:53

Другие вопросы по теме