You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Polars中实现忽略空值的滚动均值(用于RSI计算)

在Polars中计算忽略空值的滚动均值(用于RSI指标)

要实现忽略空值的滚动均值,你可以通过滚动求和除以滚动非空值计数的方式来实现,Polars原生支持这两个操作的滚动计算:

完整代码示例

import polars as pl

window_size = 5

# 构造示例数据
df = pl.DataFrame({"price_change": [1, 2, 3, -2, 4]})

# 生成增益列:仅保留正的价格变动,其余设为空值
df_gain = df.select(
    pl.when(pl.col('price_change') > 0.0)
    .then(pl.col('price_change'))
    .otherwise(None)
    .alias('gain')
)

# 计算忽略空值的滚动均值:滚动有效值总和 / 滚动有效值数量
rol_mean_gain = df_gain.select(
    (
        pl.col('gain').rolling_sum(window_size=window_size, ignore_null=True) 
        / 
        pl.col('gain').is_not_null().rolling_sum(window_size=window_size, ignore_null=True)
    ).alias('rolling_mean_gain')
)

print(rol_mean_gain)

代码说明

  1. 生成增益列:和你原逻辑一致,仅保留正的价格变动,非正值转为Polars空值None。
  2. 滚动有效值求和:rolling_sum的ignore_null=True参数会自动跳过空值,计算窗口内有效增益的总和。
  3. 滚动有效值计数:先用is_not_null()将空值转为False(对应数值0)、有效值转为True(对应数值1),再通过rolling_sum求和,得到窗口内有效值的数量。
  4. 计算均值:用滚动总和除以滚动计数,得到基于有效值的滚动均值。

结果验证

针对你的示例数据,窗口内有效增益为[1,2,3,4],总和为10,有效值数量为4,计算出的均值为10/4=2.5,完全符合你期望的计算逻辑。

内容的提问来源于stack exchange,提问作者Joris Medeišis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 08:22:39