如何在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
相关产品推荐
相关产品推荐

