В настоящее время я работаю над некоторыми данными о запасах, где мне нужно узнать минимальную цену за предыдущие n транзакционных дней. Обратите внимание, что здесь даты транзакций прерывисты, поскольку есть суббота, воскресенье и праздничные дни. Проблема в том, что поляры не знают, как найти дни предыдущих транзакций, вместо этого поляры находят фактические предыдущие дни.
Предположим, теперь у нас есть DataFrame и n = 3:
Код: Выделить всё
import polars as pl
df = pl.from_repr("""
┌────────────┬───────┐
│ Date ┆ Price │
│ --- ┆ --- │
│ date ┆ i64 │
╞════════════╪═══════╡
│ 2023-01-01 ┆ 1 │
│ 2023-01-02 ┆ 2 │
│ 2023-01-03 ┆ 3 │
│ 2023-01-05 ┆ 4 │
│ 2023-01-10 ┆ 5 │
│ 2023-01-11 ┆ 6 │
│ 2023-01-12 ┆ 7 │
└────────────┴───────┘
""")
Код: Выделить всё
df.to_pandas().Price.rolling(3).min()
Код: Выделить всё
0 NaN
1 NaN
2 1.0
3 2.0
4 3.0
5 4.0
6 5.0
Name: Price, dtype: float64
Код: Выделить всё
┌────────────┬───────┐
│ Date ┆ Price │
│ --- ┆ --- │
│ date ┆ i64 │
╞════════════╪═══════╡
│ 2023-01-01 ┆ 1 │
│ 2023-01-02 ┆ 1 │
│ 2023-01-03 ┆ 1 │
│ 2023-01-05 ┆ 3 │
│ 2023-01-10 ┆ 5 │
│ 2023-01-11 ┆ 5 │
│ 2023-01-12 ┆ 5 │
└────────────┴───────┘
Код: Выделить всё
df.rolling("Date", period="3d").agg(pl.col("Price").min())
Подробнее здесь: https://stackoverflow.com/questions/758 ... -functions
Мобильная версия