Пример данных:
Код: Выделить всё
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 │
└──────────┴─────────────────┴───────┘
""")
В 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 │
└──────────┴─────────────────┴───────┴────────────┘
Заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/751 ... ence-value