如何获取极地一组的 row_count?

侯颖堃*_*侯颖堃 5 rust-polars python-polars

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

out_df = df.select([
    pl.col("*"),
    pl.col("md5").row_count().over("md5").alias("row_count"),
])
print(out_df)
Run Code Online (Sandbox Code Playgroud)

数据应该是这样的:

MD5

A

A

md5 行数

一个 1

a2

乙1

rit*_*e46 5

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

\n

你可以这样做:

\n
df = pl.DataFrame({"md5": ["a", "a", "b"]})\n\n(df\n.with_columns(pl.lit(1).alias("ones"))\n.select([\n    pl.all().exclude("ones"),\n    pl.col("ones").cumsum().over("md5").flatten().alias("row_count")\n]))\n
Run Code Online (Sandbox Code Playgroud)\n
shape: (3, 2)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 md5 \xe2\x94\x86 row_count \xe2\x94\x82\n\xe2\x94\x82 --- \xe2\x94\x86 ---       \xe2\x94\x82\n\xe2\x94\x82 str \xe2\x94\x86 i32       \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 a   \xe2\x94\x86 1         \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xbc\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 a   \xe2\x94\x86 2         \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xbc\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 b   \xe2\x94\x86 1         \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

  • 看起来预期的功能现在已经实现了。人们会如何使用它?我尝试了 ``.with_column(pl.lit(1).cumsum().over("GroupingColumn").alias("RowCount"))``` 但这对我不起作用(```例外。 ComputeError:窗口表达式的长度与组的长度不匹配```) (4认同)

zun*_*rtj 3

也许我误解了,因为您的输出同时具有值​​ 1 和 2 a。假设你的意思是2是两者:

\n

你已经很近了,Polars 已经.count()

\n
import polars as pl\n\ndf = pl.DataFrame({"md5": ["a", "a", "b"]})\nout_df = df.select([\n    pl.col("*"),\n    pl.col("md5").count().over("md5").alias("row_count"),\n])\nprint(out_df)\n
Run Code Online (Sandbox Code Playgroud)\n

打印出这个:

\n
shape: (3, 2)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 md5 \xe2\x94\x86 row_count \xe2\x94\x82\n\xe2\x94\x82 --- \xe2\x94\x86 ---       \xe2\x94\x82\n\xe2\x94\x82 str \xe2\x94\x86 u32       \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 a   \xe2\x94\x86 2         \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xbc\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 a   \xe2\x94\x86 2         \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xbc\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 b   \xe2\x94\x86 1         \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n