В настоящее время я пытаюсь воспроизвести поведение ngroup в полярах, чтобы получить последовательные групповые индексы (кадр данных будет сгруппирован по двум столбцам). Для группы R это может быть достигнуто в мире dplyr с помощью dplyr::group_indices или более нового dplyr::cur_group_id.
Как показано в репродукции , я пробовал несколько способов, но без особого успеха: оба подхода не учитывают последовательность групп и просто возвращают количество строк по группам.
Быстрое воспроизведение:
import polars as pl
import pandas as pd
df = pd.DataFrame(
{
"id": ["a", "a", "a", "a", "b", "b", "b", "b"],
"cat": [1, 1, 2, 2, 1, 1, 2, 2],
}
)
df_pl = pl.from_pandas(df)
print(df.groupby(["id", "cat"]).ngroup())
# This is the desired behaviour
# 0 0
# 1 0
# 2 1
# 3 1
# 4 2
# 5 2
# 6 3
# 7 3
print(df_pl.select(pl.len().over("id", "cat")))
# This is only counting observation by group
# ┌─────┐
# │ len │
# │ --- │
# │ u32 │
# ╞═════╡
# │ 2 │
# │ 2 │
# │ 2 │
# │ 2 │
# │ 2 │
# │ 2 │
# │ 2 │
# │ 2 │
# └─────┘
print(df_pl.group_by("id", "cat").agg(pl.len().alias("test")))
# shape: (4, 3)
# ┌─────┬─────┬──────┐
# │ id ┆ cat ┆ test │
# │ --- ┆ --- ┆ --- │
# │ str ┆ i64 ┆ u32 │
# ╞═════╪═════╪══════╡
# │ a ┆ 1 ┆ 2 │
# │ a ┆ 2 ┆ 2 │
# │ b ┆ 1 ┆ 2 │
# │ b ┆ 2 ┆ 2 │
# └─────┴─────┴──────┘
Подробнее здесь: https://stackoverflow.com/questions/754 ... -in-polars