У меня есть кадр данных Polars, который содержит идентификатор, ДАТУ и ОС. Для каждого дня я хотел бы подсчитать, сколько уникальных идентификаторов было до этого дня.
import polars as pl
df = (
pl.DataFrame(
{
"DAY": [1,1,1,2,2,2,3,3,3],
"OS" : ["A","B","A","B","A","B","A","B","A"],
"ID": ["X","Y","Z","W","X","J","K","L","X"]
}
)
)
Желаемый результат:
shape: (3, 3)
┌─────┬─────┬─────┐
│ DAY ┆ A ┆ B │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╡
│ 1 ┆ 2 ┆ 1 │
│ 2 ┆ 2 ┆ 3 │
│ 3 ┆ 3 ┆ 4 │
└─────┴─────┴─────┘
Это должно выглядеть так, потому что в первый день это 3 значения и 3 идентификатора. На второй день идентификатор «X» повторяется с той же ОС, поэтому столбцы A остаются прежними, а остальные 2 отличаются, поэтому добавьте 2 к B. На третий день идентификатор X повторяется с A, а другой 2 разные, поэтому суммирование производится заново по каждому столбцу.
Я думаю, эту проблему можно решить с помощью следующего подхода:
(
df
.pivot(
index="DAY",
on="OS",
aggregate_function=(pl.col("ID").cum_sum().unique())
)
)
Подробнее здесь: https://stackoverflow.com/questions/790 ... uniques-id