Применить несколько размеров окна к функциям скользящего агрегирования в кадре данных PolarsPython

Программы на Python
Ответить
Anonymous
 Применить несколько размеров окна к функциям скользящего агрегирования в кадре данных Polars

Сообщение Anonymous »

В ряде функций агрегирования, таких как Rolling_mean, Rolling_max, Rolling_min и т. д., входной аргумент window_size должен иметь тип int
Мне интересно, как эффективно вычислять результаты при наличии списка window_size.
Рассмотрим следующий кадр данных:
import polars as pl

pl.Config(tbl_rows=-1)

df = pl.DataFrame(
{
"symbol": ["A", "A", "A", "A", "A", "B", "B", "B", "B"],
"price": [100, 110, 105, 103, 107, 200, 190, 180, 185],
}
)

shape: (9, 2)
┌────────┬───────┐
│ symbol ┆ price │
│ --- ┆ --- │
│ str ┆ i64 │
╞════════╪═══════╡
│ A ┆ 100 │
│ A ┆ 110 │
│ A ┆ 105 │
│ A ┆ 103 │
│ A ┆ 107 │
│ B ┆ 200 │
│ B ┆ 190 │
│ B ┆ 180 │
│ B ┆ 185 │
└────────┴───────┘

Предположим, у меня есть список из n элементов, например периодов = [2, 3]. Я ищу решение для параллельного вычисления средних значений для всех периодов, сгруппированных по символу. Скорость и эффективность использования памяти имеют решающее значение.
Результатом должен стать аккуратный/длинный кадр данных, подобный этому:
shape: (18, 4)
┌────────┬───────┬─────────────┬──────────────┐
│ symbol ┆ price ┆ mean_period ┆ rolling_mean │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ u8 ┆ f64 │
╞════════╪═══════╪═════════════╪══════════════╡
│ A ┆ 100 ┆ 2 ┆ null │
│ A ┆ 110 ┆ 2 ┆ 105.0 │
│ A ┆ 105 ┆ 2 ┆ 107.5 │
│ A ┆ 103 ┆ 2 ┆ 104.0 │
│ A ┆ 107 ┆ 2 ┆ 105.0 │
│ B ┆ 200 ┆ 2 ┆ null │
│ B ┆ 190 ┆ 2 ┆ 195.0 │
│ B ┆ 180 ┆ 2 ┆ 185.0 │
│ B ┆ 185 ┆ 2 ┆ 182.5 │
│ A ┆ 100 ┆ 3 ┆ null │
│ A ┆ 110 ┆ 3 ┆ null │
│ A ┆ 105 ┆ 3 ┆ 105.0 │
│ A ┆ 103 ┆ 3 ┆ 106.0 │
│ A ┆ 107 ┆ 3 ┆ 105.0 │
│ B ┆ 200 ┆ 3 ┆ null │
│ B ┆ 190 ┆ 3 ┆ null │
│ B ┆ 180 ┆ 3 ┆ 190.0 │
│ B ┆ 185 ┆ 3 ┆ 185.0 │
└────────┴───────┴─────────────┴──────────────┘


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

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

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

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

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

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