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

如何在Polars中生成起止日期序列并展开DataFrame

展开Polars DataFrame的日期区间并填充值

要将每行起止日期区间内的所有日期生成独立行,同时保留对应id和value,可通过Polars的date_range+explode组合实现:

输入数据

import polars as pl

df = pl.from_repr("""
┌─────┬─────────────────────┬─────────────────────┬───────┐
│ id  ┆ start               ┆ end                 ┆ value │
│ --- ┆ ---                 ┆ ---                 ┆ ---   │
│ str ┆ datetime[ns]        ┆ datetime[ns]        ┆ i64   │
╞═════╪═════════════════════╪═════════════════════╪═══════╡
│ 123 ┆ 2022-01-01 00:00:00 ┆ 2022-01-04 00:00:00 ┆ 10    │
│ abc ┆ 2022-03-04 00:00:00 ┆ 2022-03-04 00:00:00 ┆ 3     │
│ 456 ┆ 2022-05-11 00:00:00 ┆ 2022-05-16 00:00:00 ┆ 4     │
└─────┴─────────────────────┴─────────────────────┴───────┘
""")

处理代码

result = df.with_columns(
    # 生成每行start到end的每日日期序列
    pl.date_range(pl.col("start"), pl.col("end"), interval="1d").alias("date")
).explode("date")  # 将日期序列拆分为单独行
.select(["id", "date", "value"])  # 调整列顺序为期望结构

print(result)

输出结果

shape: (11, 3)
┌─────┬─────────────────────┬───────┐
│ id  ┆ date                ┆ value │
│ --- ┆ ---                 ┆ ---   │
│ str ┆ datetime[ns]        ┆ i64   │
╞═════╪═════════════════════╪═══════╡
│ 123 ┆ 2022-01-01 00:00:00 ┆ 10    │
│ 123 ┆ 2022-01-02 00:00:00 ┆ 10    │
│ 123 ┆ 2022-01-03 00:00:00 ┆ 10    │
│ 123 ┆ 2022-01-04 00:00:00 ┆ 10    │
│ abc ┆ 2022-03-04 00:00:00 ┆ 3     │
│ 456 ┆ 2022-05-11 00:00:00 ┆ 4     │
│ 456 ┆ 2022-05-12 00:00:00 ┆ 4     │
│ 456 ┆ 2022-05-13 00:00:00 ┆ 4     │
│ 456 ┆ 2022-05-14 00:00:00 ┆ 4     │
│ 456 ┆ 2022-05-15 00:00:00 ┆ 4     │
│ 456 ┆ 2022-05-16 00:00:00 ┆ 4     │
└─────┴─────────────────────┴───────┘

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:03:24