0

用法可能类似于下面的代码

out_df = df.select([
    pl.col("*"),
    pl.col("md5").row_count().over("md5").alias("row_count"),
])
print(out_df)

数据应该是这样的:

之前

md5

一个

一个

b

之后

md5 行数

一个 1

a2

乙 1

4

2 回答 2

2

也许我误会了,因为您的输出具有 1 和 2 的值a。假设你的意思2是:

你非常接近,Polars 有.count()

import polars as pl

df = pl.DataFrame({"md5": ["a", "a", "b"]})
out_df = df.select([
    pl.col("*"),
    pl.col("md5").count().over("md5").alias("row_count"),
])
print(out_df)

打印出这个:

shape: (3, 2)
┌─────┬───────────┐
│ md5 ┆ row_count │
│ --- ┆ ---       │
│ str ┆ u32       │
╞═════╪═══════════╡
│ a   ┆ 2         │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┤
│ a   ┆ 2         │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┤
│ b   ┆ 1         │
└─────┴───────────┘
于 2021-11-21T08:53:13.853 回答
0

如果我认为我理解正确,您希望对组中的每个看到的值进行计数。

你可以这样做:

df = pl.DataFrame({"md5": ["a", "a", "b"]})

(df
.with_column(pl.lit(1).alias("ones"))
.select([
    pl.all().exclude("ones"),
    pl.col("ones").cumsum().over("md5").flatten().alias("row_count")
]))
shape: (3, 2)
┌─────┬───────────┐
│ md5 ┆ row_count │
│ --- ┆ ---       │
│ str ┆ i32       │
╞═════╪═══════════╡
│ a   ┆ 1         │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┤
│ a   ┆ 2         │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┤
│ b   ┆ 1         │
└─────┴───────────┘

我们仍然需要添加一个虚拟列"ones",因为(从 polars==0.10.23 开始,我们无法在文字上应用窗口函数。我们将添加此功能。

于 2021-11-22T06:55:07.817 回答