分组
急性 & 惰性
分组操作的语法在两个 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 │
└───────────────┴──────────────┴────────────┘