Polars:创建一个新列,其中包含来自两个不同日期列的日期数组,存储范围的开始和结束

问题描述 投票:0回答:1

我有一个带有开始日期和结束日期的数据框(开始促销和结束促销)。我想使用 Python Polars 创建一个新列(来自前面提到的列),它将是一个数组或结构对象。这样做的目的是为了可以分解该列,为每个日期创建一个值,稍后可以将其连接到另一个数据框。

这是一个示例数据框:

开始促销 促销结束 价格
2024-05-01 2024-05-05 12
2023-12-30 2024-01-01 10

期望的最终结果是:

开始促销 促销结束 价格 促销日期
2024-05-01 2024-05-05 12 [“2024-05-01”、“2024-05-02”、“2024-05-03”、“2024-05-04”、“2024-05-05”]
2023-12-30 2024-01-01 10 ["2023-12-30", "2023-12-31", "2024-01-01"]

以下是爆炸后的样子:

开始促销 促销结束 价格 促销日期
2024-05-01 2024-05-05 12 “2024-05-01”
2024-05-01 2024-05-05 12 “2024-05-02”
2024-05-01 2024-05-05 12 “2024-05-03”
2024-05-01 2024-05-05 12 “2024-05-04”
2024-05-01 2024-05-05 12 “2024-05-05”
2023-12-30 2024-01-01 10 “2023-12-30”
2023-12-30 2024-01-01 10 “2023-12-31”
2023-12-30 2024-01-01 10 “2024-01-01”

这是一个尝试使用的示例数据框:

import polars as pl

data = {
    "Start Promotion": ["2024-05-01", "2023-12-30"],
    "End Promotion": ["2024-05-05", "2024-01-01"],
    "Price": [12, 10]
}

df = pl.DataFrame(data)

如果您有任何需要澄清的问题,请告诉我。

python arrays struct python-polars date-range
1个回答
0
投票

您可以使用

.date_ranges()
来实现:

(
    df
    .with_columns(
        pl.date_ranges("Start Promotion", "End Promotion").alias("Promotion Dates")
    )
)

┌─────────────────┬───────────────┬───────┬─────────────────────────────────┐
│ Start Promotion ┆ End Promotion ┆ Price ┆ Promotion Dates                 │
│ ---             ┆ ---           ┆ ---   ┆ ---                             │
│ date            ┆ date          ┆ i64   ┆ list[date]                      │
╞═════════════════╪═══════════════╪═══════╪═════════════════════════════════╡
│ 2024-05-01      ┆ 2024-05-05    ┆ 12    ┆ [2024-05-01, 2024-05-02, … 202… │
│ 2023-12-30      ┆ 2024-01-01    ┆ 10    ┆ [2023-12-30, 2023-12-31, 2024-… │
└─────────────────┴───────────────┴───────┴─────────────────────────────────┘
© www.soinside.com 2019 - 2024. All rights reserved.