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

Python Polars中rolling_product需求及rolling_sum的Git位置查询

Polars 滚动乘积实现与 rolling_sum 源码位置

一、高性能滚动乘积实现

直接用rolling_apply自定义乘积会因Python层循环导致性能极差,推荐借助对数求和+指数还原的方式复用原生rolling_sum,性能与原生窗口函数一致:

代码示例

import polars as pl

def rolling_prod(df: pl.DataFrame, col: str, window_size: int) -> pl.DataFrame:
    return df.with_columns(
        pl.col(col)
        .log()
        .rolling_sum(window_size=window_size)
        .exp()
        .alias(f"{col}_rolling_prod")
    )

# 测试用例
df = pl.DataFrame({"val": [2, 3, 4, 5, 6]})
print(rolling_prod(df, "val", 3))

特殊值处理

如果列包含0或负数,需额外处理:

  • 0:可通过条件判断标记后单独处理,避免对数报错
  • 负数:提取符号的滚动计数(奇偶性决定最终符号),对绝对值执行上述对数乘积逻辑,最后还原符号

二、原生 rolling_product 状态

截至Polars v0.20+版本,官方未提供原生rolling_product函数,上述方法是当前最优的高性能替代方案。

三、rolling_sum 源码位置

Polars核心窗口函数基于Rust实现,Python仅为绑定层:

  • Rust核心逻辑:polars/polars-core/src/series/rolling/mod.rs
  • 求和具体实现:同目录下的functions.rs文件中
  • Python接口定义:polars/polars-python/src/functions/rolling.py

内容的提问来源于stack exchange,提问作者user21703458

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:22:11