You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust的Polars v0.46.0 DataFrame中添加列均值行?

在Polars v0.46.0中追加数值列均值行的实现方案

核心思路

Polars v0.46.0中mean_as_series方法已被移除,直接调用Column::mean会触发 trait 约束错误——该方法要求列满足Ord等额外约束,并非通用场景的最优解。新版本更推荐通过Series 方法或表达式API完成统计计算,再用vstack将均值行追加到原DataFrame。

简洁实现代码

use polars::prelude::*;

fn main() {
    let df: DataFrame = df! [
        "a" => &["a", "b", "c"],
        "b" => &[1, 2, 3],
        "c" => &["d", "e", "f"],
        "d" => &[4, 5, 6],
    ].unwrap();

    // 构造均值行:数值列取均值,非数值列填充"avg"
    let avg_row = df.select(
        pl.col("*").map(|s| {
            if s.dtype().is_numeric() {
                // 对数值列计算均值并保持类型兼容
                s.mean().unwrap()
            } else {
                // 非数值列填充"avg",并转换为原列类型
                pl.lit("avg").cast(s.dtype()).unwrap()
            }
        })
    ).unwrap();

    // 将均值行追加到原DataFrame
    let result_df = df.vstack(&avg_row).unwrap();

    println!("{}", result_df);
}

输出结果

┌─────┬─────┬─────┬─────┐
│ a   ┆ b   ┆ c   ┆ d   │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ f64 ┆ str ┆ f64 │
╞═════╪═════╪═════╪═════╡
│ a   ┆ 1.0 ┆ d   ┆ 4.0 │
│ b   ┆ 2.0 ┆ e   ┆ 5.0 │
│ c   ┆ 3.0 ┆ f   ┆ 6.0 │
│ avg ┆ 2.0 ┆ avg ┆ 5.0 │
└─────┴─────┴─────┴─────┘

自定义非数值列显示

如果需要非数值列显示null而非avg,修改非数值列的处理逻辑即可:

pl.col("*").map(|s| {
    if s.dtype().is_numeric() {
        s.mean().unwrap()
    } else {
        pl.lit(None).cast(s.dtype()).unwrap()
    }
})

内容的提问来源于stack exchange,提问作者Fedii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:22:43