如何用Polars计算日内基于最近20条记录的Close列滚动平均
Polars实现每日滚动20期Close均值
要在Polars中实现按日期分组、仅使用当日数据计算Close列的最近20条记录滚动平均(每日前19条为NA),可以利用窗口函数+滚动计算的组合,确保分组内的时序正确性且不跨日计算。
实现代码
ohlc = ohlc.with_columns( pl.col("Close") .rolling_mean(window=20) .over(partition_by="Date", order_by="DateTime") .alias("MA") )
代码说明
partition_by="Date":将数据按日期分组,确保滚动计算严格限制在当日范围内,不会混入前一日的数据。order_by="DateTime":在每个日期分组内按时间戳排序,保证滚动窗口按 chronological 顺序计算(这一步至关重要,原始数据可能并非按日内时间排序)。rolling_mean(window=20):计算当前行及之前19行的平均值(共20条记录)。默认min_periods=20,因此每日前19条记录会返回NA,符合需求。alias("MA"):将计算结果命名为新列MA,同时保留所有原有字段。
与Pandas实现的对比
该Polars代码逻辑完全对应你提供的Pandas实现:
- Pandas通过
groupby(['Date'])['Close'].rolling(window).mean()实现分组滚动平均,再通过reset_index合并回原DataFrame。 - Polars通过
over(partition_by="Date", order_by="DateTime")替代分组+重置索引的流程,代码更简洁且性能更优(Polars窗口函数为向量化实现)。
内容的提问来源于stack exchange,提问作者Ted Black
相关产品推荐
相关产品推荐

