Полярные: выполнять множество операций «над» одной и той же группой.Python

Программы на Python
Ответить
Anonymous
 Полярные: выполнять множество операций «над» одной и той же группой.

Сообщение Anonymous »

Показан игрушечный пример с K=2, но вопрос в основном актуален для высокой мощности g и K>>1:
df = pl.DataFrame(dict(
g=[1, 2, 1, 2, 1, 2],
v=[1, 2, 3, 4, 5, 6],
))

K = 2

df.with_columns((col.v.shift(k+1).over('g').alias(f's{k}') for k in range(K)))

╭─────┬─────┬──────┬──────╮
│ g ┆ v ┆ s0 ┆ s1 │
│ i64 ┆ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪══════╪══════╡
│ 1 ┆ 1 ┆ null ┆ null │
│ 2 ┆ 2 ┆ null ┆ null │
│ 1 ┆ 3 ┆ 1 ┆ null │
│ 2 ┆ 4 ┆ 2 ┆ null │
│ 1 ┆ 5 ┆ 3 ┆ 1 │
│ 2 ┆ 6 ┆ 4 ┆ 2 │
╰─────┴─────┴──────┴──────╯

Как я могу гарантировать, что группировка по g выполняется только один раз?
Похоже, что Polars не оптимизирует для этого план запроса.
Я ожидаю, что он будет работать так же быстро, как:
df.group_by('g').agg((col.v.shift(k+1).alias(f's{k}') for k in range(K)))


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

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

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

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

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

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