我遇到了一个cum_sum
的问题,我只想累积地对一个列上的唯一值求和.
以下是我想要实现的一个例子:
┌─────┬─────┬─────┐
│ a ┆ b ┆ d │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╡
│ 1 ┆ 1 ┆ 1 │
│ 1 ┆ 2 ┆ 2 │
│ 1 ┆ 3 ┆ 3 │
│ 1 ┆ 1 ┆ 1 │
│ 2 ┆ 1 ┆ 4 │
│ 2 ┆ 2 ┆ 4 │
│ 2 ┆ 2 ┆ 5 │
│ 2 ┆ 2 ┆ 5 │
└─────┴─────┴─────┘
a
和b
是我的输入列,其中a
是组,b
是组内的唯一ID.我想生成d
,这是所有组中唯一的id.我想不出办法来.
这是我管理的—我可以通过使用over
得到每个组的最大值,但我不知道如何做cumsum
得到唯一的id.
import polars as pl
df = pl.DataFrame({'a': [1,1,1,1,2,2,2,2],
'b': [1,2,3,1,1,2,2,2]})
df.with_columns(c = pl.max('b').over('a')).with_columns(pl.cum_sum("c").over("c").alias("d"))
Out[60]:
shape: (8, 4)
┌─────┬─────┬─────┬─────┐
│ a ┆ b ┆ c ┆ d │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╪═════╡
│ 1 ┆ 1 ┆ 3 ┆ 3 │
│ 1 ┆ 2 ┆ 3 ┆ 6 │
│ 1 ┆ 3 ┆ 3 ┆ 9 │
│ 1 ┆ 1 ┆ 3 ┆ 12 │
│ 2 ┆ 1 ┆ 2 ┆ 2 │
│ 2 ┆ 2 ┆ 2 ┆ 4 │
│ 2 ┆ 2 ┆ 2 ┆ 6 │
│ 2 ┆ 2 ┆ 2 ┆ 8 │
└─────┴─────┴─────┴─────┘
我相信这一定很简单,但我想不出这个问题—似乎我需要一个cumsum
的唯一值c
,然后加上b
,得到唯一的id,但也许我需要某种条件和c
,只有当它的值改变?
似乎我应该做一些类似于这个答案(https://stackoverflow.com/a/74985568/1506763)的事情,但我卡住了.