Код: Выделить всё
import polars as pl
from datetime import date
from random import randint
df = pl.DataFrame({
"category": [cat for cat in ["A", "B"] for _ in range(1, 32)],
"date": [date(2025, 1, i) for _ in ["A", "B"] for i in range(1, 32)],
"value": [randint(1, 50) for _ in ["A", "B"] for _ in range(1, 32)]
})
Код: Выделить всё
df.with_columns(
value_max=pl.col("value").rolling_max_by("date", window_size="5d", closed="both").over(pl.col("category"))
)
Код: Выделить всё
shape: (62, 4)
┌──────────┬────────────┬───────┬───────────┐
│ category ┆ date ┆ value ┆ value_max │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ date ┆ i64 ┆ i64 │
╞══════════╪════════════╪═══════╪═══════════╡
│ A ┆ 2025-01-01 ┆ 42 ┆ 42 │
│ A ┆ 2025-01-02 ┆ 18 ┆ 42 │
│ A ┆ 2025-01-03 ┆ 33 ┆ 42 │
│ A ┆ 2025-01-04 ┆ 35 ┆ 42 │
│ A ┆ 2025-01-05 ┆ 46 ┆ 46 │
│ … ┆ … ┆ … ┆ … │
│ B ┆ 2025-01-27 ┆ 49 ┆ 49 │
│ B ┆ 2025-01-28 ┆ 22 ┆ 49 │
│ B ┆ 2025-01-29 ┆ 49 ┆ 49 │
│ B ┆ 2025-01-30 ┆ 32 ┆ 49 │
│ B ┆ 2025-01-31 ┆ 25 ┆ 49 │
└──────────┴────────────┴───────┴───────────┘
В настоящее время я использую самосоединение с условием для получения даты. Есть ли другой способ сделать это без использования соединения? Кроме того, достижима ли новая логика с помощью SQL?
Подробнее здесь: https://stackoverflow.com/questions/795 ... -partition
Мобильная версия