1

如果 DataFrame 使用 polars-python 构造如下:

import polars as pl
from polars import col
from datetime import datetime

df = pl.DataFrame({
    "dates": ["2016-07-02", "2016-08-10",  "2016-08-31", "2016-09-10"],
    "values": [1, 2, 3, 4]
})

如何选择某个日期范围之间的行,即介于"2016-08-10"和之间"2016-08-31",以便期望的结果是:

┌────────────┬────────┐
│ dates      ┆ values │
│ ---        ┆ ---    │
│ date       ┆ i64    │
╞════════════╪════════╡
│ 2016-08-10 ┆ 2      │
├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ 2016-08-31 ┆ 3      │
└────────────┴────────┘
4

1 回答 1

3

首先,您需要将字符串值转换datesdatetimes然后过滤:

# eager
(df.with_column(pl.col("dates").str.strptime(pl.Date)) 
 .filter(col("dates").is_between(datetime(2016, 8, 9), datetime(2016, 9, 1)))
)

# lazy
(df.lazy()
 .with_column(pl.col("dates").str.strptime(pl.Date)) 
 .filter(col("dates").is_between(datetime(2016, 8, 9), datetime(2016, 9, 1)))
 .collect()
)

两者都会产生所需的输出:

┌────────────┬────────┐
│ dates      ┆ values │
│ ---        ┆ ---    │
│ date       ┆ i64    │
╞════════════╪════════╡
│ 2016-08-10 ┆ 2      │
├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ 2016-08-31 ┆ 3      │
└────────────┴────────┘
于 2021-10-15T22:35:47.200 回答