分组

急性 & 惰性

分组操作的语法在两个 API 中是类似的 —— 二者中均可使用表达式。 要完成分组操作,先调用 .groupby() 函数,并跟随一个 .agg() 函数。

.agg() 函数中,你可以对任意数量的列进行任意聚合操作。 要对所有列进行聚合,可以使用通配符表达式: .agg(pl.col("*").sum())

来看一个简单的(惰性)例子:

import polars as pl

q = (
    pl.scan_csv("data/reddit.csv")
    .groupby("comment_karma")
    .agg([pl.col("name").n_unique().alias("unique_names"), pl.max("link_karma")])
    .sort(by="unique_names", descending=True)  # 逆序排列,reverse=True
)

df = q.fetch()

这将返回下面的结果:

shape: (100, 3)
┌───────────────┬──────────────┬────────────┐
│ comment_karma ┆ unique_names ┆ link_karma │
│ ---           ┆ ---          ┆ ---        │
│ i64           ┆ u32          ┆ i64        │
╞═══════════════╪══════════════╪════════════╡
│ 0             ┆ 367          ┆ 611        │
│ 1             ┆ 9            ┆ 22         │
│ 3             ┆ 6            ┆ 1          │
│ 38            ┆ 4            ┆ 291        │
│ …             ┆ …            ┆ …          │
│ -5            ┆ 1            ┆ 0          │
│ 232           ┆ 1            ┆ 47         │
│ 835           ┆ 1            ┆ 1154       │
│ 431           ┆ 1            ┆ 8          │
└───────────────┴──────────────┴────────────┘