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

如何实现Polars DataFrame按指定列分组后的时间序列升采样

Polars 分组后时间序列升采样实现方案

问题说明

需要对Polars DataFrame先按fruit列分组,再按date字段做1天粒度升采样,空缺值使用前向填充规则补全:

  • 测试数据集构造代码:
import polars as pl

df = pl.from_repr("""
┌───────┬─────────────────────┬───────┐
│ fruit ┆ date                ┆ count │
│ ---   ┆ ---                 ┆ ---   │
│ str   ┆ datetime[ns]        ┆ i64   │
╞═══════╪═════════════════════╪═══════╡
│ apple ┆ 2022-06-01 00:00:00 ┆ 5     │
│ apple ┆ 2022-06-03 00:00:00 ┆ 6     │
│ apple ┆ 2022-06-04 00:00:00 ┆ 2     │
│ apple ┆ 2022-06-07 00:00:00 ┆ 1     │
│ pear  ┆ 2022-06-01 00:00:00 ┆ 9     │
│ pear  ┆ 2022-06-07 00:00:00 ┆ 12    │
└───────┴─────────────────────┴───────┘
""")
  • 期望输出共14行,每个水果分组内的日期从2022-06-01到2022-06-07按天连续,空缺的count值取前一个最近的非空值填充。
  • 无分组场景下全局升采样可直接使用df.upsample('date', every='1d').fill_null(strategy="forward")实现,但该方法无法自动适配分组逻辑。

实现代码

Polars 0.19及以上版本原生支持分组后链式调用升采样方法,代码如下:

result = df.group_by("fruit", maintain_order=True)\
    .upsample(time_column="date", every="1d")\
    .fill_null(strategy="forward")

关键参数说明

  • maintain_order=True:保留原数据中分组的出现顺序,避免结果中分组顺序被随机重排,和预期输出顺序一致。
  • 分组后调用upsample时,时间序列生成逻辑会在每个分组内部独立执行,不会跨组生成无效时间行。
  • 后续的fill_null(strategy="forward")会自动按分组边界执行前向填充,不会出现上一组末尾值填充到下一组开头的问题。

执行后得到的结果和期望输出完全匹配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:48:25