Оконная функция Python Polars с литеральным типомPython

Программы на Python
Anonymous
Оконная функция Python Polars с литеральным типом

Сообщение Anonymous »

Предположим, у меня есть DataFrame с таким столбцом идентификатора:

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

df = pl.from_repr("""
┌─────┐
│ id  │
│ --- │
│ i64 │
╞═════╡
│ 1   │
│ 1   │
│ 1   │
│ 2   │
│ 2   │
│ 3   │
│ 3   │
└─────┘
""")
Я хочу агрегировать текущий счетчик по столбцу id, чтобы получить следующий результат:

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

┌─────┬───────┐
│ id  ┆ count │
│ --- ┆ ---   │
│ i64 ┆ i64   │
╞═════╪═══════╡
│ 1   ┆ 1     │
│ 1   ┆ 2     │
│ 1   ┆ 3     │
│ 2   ┆ 1     │
│ 2   ┆ 2     │
│ 3   ┆ 1     │
│ 3   ┆ 2     │
└─────┴───────┘
Моя попытка заключалась в создании фиктивного столбца, который, я думаю, дал желаемый результат, но кажется немного хакерским.

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

(
df.with_columns(
pl.lit(1).alias("ones")
)
.with_columns(
(pl.col("ones").cum_sum().over("id")).alias("count")
)
.drop("ones")
)
Однако, когда я пробую это:

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

(
df.with_columns(
(pl.lit(1).cum_sum().over("id")).alias("count")
)
.drop("ones")
)
Я получаю сообщение об ошибке «ComputeError: длина выражения окна не соответствует длине выражения группы».
Есть ли лучший способ сделать это? Чего мне не хватает в моей попытке выше?

Подробнее здесь: https://stackoverflow.com/questions/758 ... teral-type

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