Решение Polars для нормализации групп по эталонному значению для каждой группыPython

Программы на Python
Anonymous
 Решение Polars для нормализации групп по эталонному значению для каждой группы

Сообщение Anonymous »

Я пытаюсь использовать Polars для нормализации значений групп записей по одному опорному значению для каждой группы.
Пример данных:

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

import polars as pl

df = pl.from_repr("""
┌──────────┬─────────────────┬───────┐
│ group_id ┆ reference_state ┆ value │
│ ---      ┆ ---             ┆ ---   │
│ i64      ┆ str             ┆ i64   │
╞══════════╪═════════════════╪═══════╡
│ 1        ┆ ref             ┆ 5     │
│ 1        ┆ a               ┆ 3     │
│ 1        ┆ b               ┆ 1     │
│ 2        ┆ ref             ┆ 4     │
│ 2        ┆ a               ┆ 8     │
│ 2        ┆ b               ┆ 2     │
└──────────┴─────────────────┴───────┘
""")
Я пытаюсь сгенерировать нормализованный столбец, который содержит значение, разделенное на значение состояния ссылки ref для каждой группы.
В Pandas это просто:

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

df = df.to_pandas()

for (i, x) in df.groupby("group_id"):
ref_val = x.loc[x["reference_state"] == "ref"]["value"]
df.loc[df["group_id"] == i, "normalised"] = x["value"] / ref_val.to_list()[0]

pl.from_pandas(df)

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

shape: (6, 4)
┌──────────┬─────────────────┬───────┬────────────┐
│ group_id ┆ reference_state ┆ value ┆ normalised │
│ ---      ┆ ---             ┆ ---   ┆ ---        │
│ i64      ┆ str             ┆ i64   ┆ f64        │
╞══════════╪═════════════════╪═══════╪════════════╡
│ 1        ┆ ref             ┆ 5     ┆ 1.0        │
│ 1        ┆ a               ┆ 3     ┆ 0.6        │
│ 1        ┆ b               ┆ 1     ┆ 0.2        │
│ 2        ┆ ref             ┆ 4     ┆ 1.0        │
│ 2        ┆ a               ┆ 8     ┆ 2.0        │
│ 2        ┆ b               ┆ 2     ┆ 0.5        │
└──────────┴─────────────────┴───────┴────────────┘
Есть ли способ сделать это в Polars?
Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/751 ... ence-value

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