我遇到了一个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   │
└─────┴─────┴─────┘

ab是我的输入列,其中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)的事情,但我卡住了.

推荐答案

你可能会用method="dense"来寻找pl.Expr.rank.

df.with_columns(
    pl.struct("a", "b").rank("dense").alias("id")
)
shape: (8, 3)
┌─────┬─────┬─────┐
│ a   ┆ b   ┆ id  │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ u32 │
╞═════╪═════╪═════╡
│ 1   ┆ 1   ┆ 1   │
│ 1   ┆ 2   ┆ 2   │
│ 1   ┆ 3   ┆ 3   │
│ 1   ┆ 1   ┆ 1   │
│ 2   ┆ 1   ┆ 4   │
│ 2   ┆ 2   ┆ 5   │
│ 2   ┆ 2   ┆ 5   │
│ 2   ┆ 2   ┆ 5   │
└─────┴─────┴─────┘

Python相关问答推荐

在函数内部使用eval(),将函数的输入作为字符串的一部分

仅从风格中获取 colored颜色 循环

如何在箱形图中添加绘制线的传奇?

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

_repr_html_实现自定义__getattr_时未显示

Telethon加入私有频道

使用NeuralProphet绘制置信区间时出错

创建可序列化数据模型的最佳方法

如何根据一列的值有条件地 Select 前N组?

多指标不同顺序串联大Pandas 模型

在电影中向西北方向对齐""

jsonschema日期格式

Js的查询结果可以在PC Chrome上显示,但不能在Android Chrome、OPERA和EDGE上显示,而两者都可以在Firefox上运行

删除特定列后的所有列

我可以不带视频系统的pygame,只用于游戏手柄输入吗?''

将数字数组添加到Pandas DataFrame的单元格依赖于初始化

如何在Quarto中的标题页之前创建序言页

.awk文件可以使用子进程执行吗?

无法使用请求模块从网页上抓取一些产品的名称

生产者/消费者-Queue.get by list