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

在Rust中使用Polars按名称筛选行并计算平均年龄

正确实现方案

代码示例

use polars::prelude::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 构建示例DataFrame
    let df = df!(
        "name" => ["panda", "polarbear", "seahorse"],
        "age" => [5, 7, 1]
    )?;

    let target_names = vec!["panda", "seahorse"];
    let average_age = df.lazy()
        // 筛选出name在目标列表中的行
        .filter(col("name").is_in(target_names))
        // 计算筛选后age列的平均值
        .agg([col("age").mean()])
        // 执行延迟计算,获取结果
        .collect()?;

    println!("平均年龄:{}", average_age);
    Ok(())
}

关键说明

  1. 筛选行而非列元素:你之前在select中调用filter是对列内元素做过滤,而非筛选整行。正确的做法是使用.filter()方法直接对DataFrame的行进行筛选,传入一个布尔类型的Expr来判断行是否符合条件。
  2. 使用Expr API构建条件:Polars的延迟API(lazy)不支持直接传递Rust闭包作为过滤条件,必须用Expr组合出查询逻辑。这里col("name").is_in(target_names)会生成一个布尔Expr,自动检查每行的name是否在目标向量中。
  3. 触发延迟计算:延迟API的操作只是构建查询计划,必须调用.collect()才能实际执行计算并得到结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:01:12