Найдите соответствующую дату максимального значения в скользящем окне каждого раздела.Python

Программы на Python
Ответить
Anonymous
 Найдите соответствующую дату максимального значения в скользящем окне каждого раздела.

Сообщение Anonymous »

Пример кода:

Код: Выделить всё

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        │
└──────────┴────────────┴───────┴───────────┘
Я также хочу создать еще один столбец и найти соответствующую дату значения value_max. Например, для категории A значение этого нового столбца в дате 01.01.2025/02.01.2025/03.01.2025/04.01.2025 равно 01.01.2025, а при дате 05.01.2025 05.01.2025.
В настоящее время я использую самосоединение с условием для получения даты. Есть ли другой способ сделать это без использования соединения? Кроме того, достижима ли новая логика с помощью SQL?

Подробнее здесь: https://stackoverflow.com/questions/795 ... -partition
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»