如何用Polars表达式计算行均值?未找到pl.Expr.mean的axis参数
在Polars中计算行均值的方法
Polars里pl.Expr.mean()默认按列(纵向)计算聚合值,确实没有axis参数。要计算行均值,有几种实用的方法:
方法1:用pl.mean_horizontal(推荐)
这是Polars专门为横向(行维度)计算均值设计的函数,用法简单直接:
import polars as pl df = pl.DataFrame({ "foo": [1, 2, 3], "bar": [6, 7, 8], }) # 计算所有列的行均值,新增为mean_col列 df = df.with_columns(pl.mean_horizontal(pl.all()).alias("mean_col")) print(df)
运行后输出:
shape: (3, 3) ┌─────┬─────┬─────────┐ │ foo ┆ bar ┆ mean_col│ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ f64 │ ╞═════╪═════╪═════════╡ │ 1 ┆ 6 ┆ 3.5 │ │ 2 ┆ 7 ┆ 4.5 │ │ 3 ┆ 8 ┆ 5.5 │ └─────┴─────┴─────────┘
要是只需要计算特定列的行均值,把pl.all()换成列名列表就行:
df = df.with_columns(pl.mean_horizontal(["foo", "bar"]).alias("mean_col"))
方法2:用row方法逐行处理
如果需要自定义行计算逻辑,可以用row方法遍历每行,配合lambda函数算均值:
df = df.with_columns( pl.row(return_dtype=pl.Float64).map_elements(lambda x: sum(x)/len(x)).alias("mean_col") )
不过这种方法性能不如第一种,数据量大的时候优先用pl.mean_horizontal。
方法3:直接用pl.Expr.mean(axis=1)(Polars 0.19.0+可用)
从Polars 0.19.0版本开始,pl.Expr.mean()新增了axis参数,现在可以直接这么写:
df = df.with_columns(pl.all().mean(axis=1).alias("mean_col"))
如果你的Polars版本比较老,建议升级后用这种更直观的写法。
内容的提问来源于stack exchange,提问作者Sigi
相关产品推荐
相关产品推荐

