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

Python-Polars固定起始点扩展窗口分组聚合高效实现问询

在Python-Polars中实现从首个时间戳开始的扩展窗口聚合

针对你需要从首个时间戳开始的扩展窗口聚合需求,这里提供两种高效的向量化实现方法,替代循环筛选的方案:

方法1:交叉连接+过滤+分组聚合

适合自定义任意时间戳序列的场景,利用Polars的向量化操作避免循环:

from datetime import date
import polars as pl

df = pl.DataFrame({"Day":[date(2022, 1, i) for i in range(1,10)], "value":[1,2,3,4,5,6,7,8,9]})

# 生成目标时间戳序列(可自定义间隔)
date_range = pl.date_range(df["Day"].min(), df["Day"].max(), interval="1w", eager=True).to_frame("window_end")

# 执行扩展窗口聚合
result = (
    df.cross_join(date_range)
    .filter(pl.col("Day") <= pl.col("window_end"))
    .group_by("window_end")
    .agg(
        pl.col("value").sum().alias("total_value"),
        pl.col("value").mean().alias("avg_value"),
        pl.col("Day").count().alias("record_count")
    )
    .sort("window_end")
)

print(result)

输出:

shape: (2, 4)
┌────────────┬────────────┬──────────┬──────────────┐
│ window_end ┆ total_value┆ avg_value┆ record_count │
│ ---        ┆ ---        ┆ ---      ┆ ---          │
│ date       ┆ i64        ┆ f64      ┆ u32          │
╞════════════╪════════════╪══════════╪══════════════╡
│ 2022-01-02 ┆ 3          ┆ 1.5      ┆ 2            │
│ 2022-01-09 ┆ 45         ┆ 5.0      ┆ 9            │
└────────────┴────────────┴──────────┴──────────────┘

方法2:使用group_by_dynamic固定窗口起始

针对规则时间间隔的场景,直接利用group_by_dynamic的start参数固定窗口起始为首个时间戳,性能更优:

result = (
    df.group_by_dynamic(
        index_column="Day",
        every="1w",  # 分组间隔
        start=df["Day"].min(),  # 固定窗口起始为数据最早日期
        closed="both"  # 包含窗口首尾的时间点
    )
    .agg(
        pl.col("value").sum().alias("total_value"),
        pl.col("value").mean().alias("avg_value"),
        pl.col("Day").count().alias("record_count")
    )
)

print(result)

两种方法对比

  • 方法1:灵活性强,支持自定义任意时间戳序列(如非规则间隔),但需要交叉连接操作,数据量较大时内存占用略高;
  • 方法2:更高效,直接利用Polars的动态分组优化,内存占用更低,适合规则时间间隔的扩展窗口需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:45:26