Столбец Group-By в полярах DataFrame внутри with_columnsPython

Программы на Python
Anonymous
 Столбец Group-By в полярах DataFrame внутри with_columns

Сообщение Anonymous »

У меня есть следующий фрейм данных:

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

import polars as pl

df = pl.DataFrame({
'ID': [1, 1, 5, 5, 7, 7, 7],
'YEAR': [2025, 2025, 2023, 2024, 2020, 2021, 2021]
})
shape: (7, 2)
┌─────┬──────┐
│ ID  ┆ YEAR │
│ --- ┆ ---  │
│ i64 ┆ i64  │
╞═════╪══════╡
│ 1   ┆ 2025 │
│ 1   ┆ 2025 │
│ 5   ┆ 2023 │
│ 5   ┆ 2024 │
│ 7   ┆ 2020 │
│ 7   ┆ 2021 │
│ 7   ┆ 2021 │
└─────┴──────┘
Теперь я хотел бы получить уникальное количество лет для каждого идентификатора, т.е.

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

shape: (7, 3)
┌─────┬──────┬──────────────┐
│ ID  ┆ YEAR ┆ UNIQUE_YEARS │
│ --- ┆ ---  ┆ ---          │
│ i64 ┆ i64  ┆ u32          │
╞═════╪══════╪══════════════╡
│ 1   ┆ 2025 ┆ 1            │
│ 1   ┆ 2025 ┆ 1            │
│ 5   ┆ 2023 ┆ 2            │
│ 5   ┆ 2024 ┆ 2            │
│ 7   ┆ 2020 ┆ 2            │
│ 7   ┆ 2021 ┆ 2            │
│ 7   ┆ 2021 ┆ 2            │
└─────┴──────┴──────────────┘
Я попробовал df.with_columns(pl.col('YEAR').over('ID').alias('UNIQUE_YEARS')), но это дает неверный результат. Так я придумал

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

df.join(df.group_by('ID').agg(pl.col('YEAR').unique().len().alias('UNIQUE_YEARS')), on='ID', how='left')
что дает правильный результат! Но это выглядит немного неуклюже, и мне интересно, есть ли более естественный способ использования with_columns и поверх?

Подробнее здесь: https://stackoverflow.com/questions/795 ... th-columns

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