
Polars 支持在 select() 上直接使用聚合表达式(如 .mean()、.sum()、.first() 等),当所有列均为聚合表达式时,结果自动压缩为单行 DataFrame,无需借助 dummy 列或 group_by()。
polars 支持在 `select()` 上直接使用聚合表达式(如 `.mean()`、`.sum()`、`.first()` 等),当所有列均为聚合表达式时,结果自动压缩为单行 dataframe,无需借助 dummy 列或 `group_by()`。
在 Polars 中,聚合操作(aggregation)并不强制依赖 group_by() —— 这与 pandas 的 agg() 行为有本质区别。只要你在 select() 上全部使用聚合表达式(即返回标量值的表达式),Polars 会自动将整个 DataFrame 视为一个隐式“全局组”,并输出仅含一行的结果。
✅ 正确用法(推荐):
import polars as pl
df = pl.DataFrame({
"a": [1, 2, 3, 4, 5],
"b": [0, 0, 1, 1, 1],
})
result = df.select(
pl.col("a").mean().alias("a_mean"),
pl.col("b").sum().alias("b_sum"),
pl.col("a").max().alias("a_max"),
pl.col("b").n_unique().alias("b_nunique")
)
print(result)输出:
shape: (1, 4) ┌────────┬────────┬────────┬──────────┐ │ a_mean ┆ b_sum ┆ a_max ┆ b_nunique │ │ --- ┆ --- ┆ --- ┆ --- │ │ f64 ┆ i64 ┆ i64 ┆ u32 │ ╞════════╪════════╪════════╪═══════════╡ │ 3.0 ┆ 3 ┆ 5 ┆ 2 │ └────────┴────────┴────────┴───────────┘
⚠️ 注意事项:
- 若 select() 中混入非聚合列(例如 pl.col("a")),Polars 会报错:InvalidOperationError: expected all expressions to be aggregations。这是 Polars 的类型安全机制,确保语义明确。
- 所有聚合表达式必须兼容全局上下文(如 .first()、.count()、.std() 均合法;而 .over("group") 或窗口函数则不适用此处)。
- 不要误用 agg() 方法:df.agg(...) 是旧版 API(已弃用),现代 Polars 应统一使用 select() + 聚合表达式组合。
? 小技巧:若需同时保留原始结构与聚合结果,可用 with_columns() 配合聚合表达式(此时聚合值会广播至每行);但若目标是「仅一行摘要」,select() 是最简洁、最符合语义的选择。
总结:摆脱 dummy group 的束缚——Polars 的 select() 天然支持无分组全局聚合,语义清晰、性能高效,是生成统计摘要的理想方式。










