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

在Rust中使用Polars:如何结合自定义函数实现group_by操作

Rust Polars 实现分组后应用自定义函数

在Rust的Polars库中,你可以通过group_by结合map_groups方法实现和Python版本类似的分组自定义函数逻辑,核心是适配强类型语言的签名要求:

基础实现示例

假设你已有自定义函数my_function,只需确保它的返回值为PolarsResult<DataFrame>(处理Polars操作可能出现的错误),即可直接传入map_groups:

use polars::prelude::*;

// 自定义函数,注意返回PolarsResult<DataFrame>
fn my_function(df: DataFrame) -> PolarsResult<DataFrame> {
    // 这里编写你的自定义逻辑,比如新增列、过滤数据等
    Ok(df.with_column("new_col", lit(1))?)
}

fn main() -> PolarsResult<()> {
    // 构造测试数据
    let df = df!(
        "grouping_col" => &["A", "A", "B", "B"],
        "value" => &[1, 2, 3, 4]
    )?;

    // 分组后应用自定义函数
    let grouped_result = df
        .group_by(["grouping_col"])?
        .map_groups(my_function)?;

    println!("{}", grouped_result);
    Ok(())
}

用闭包直接编写逻辑

如果不需要单独定义函数,也可以直接在map_groups中传入闭包:

let grouped_result = df
    .group_by(["grouping_col"])?
    .map_groups(|group_df| {
        // 直接在闭包内实现分组逻辑,比如基于分组行数生成新列
        Ok(group_df.with_column("group_size", lit(group_df.height()))?)
    })?;

关键注意点

  • Rust是强类型语言,自定义函数/闭包必须接收DataFrame并返回PolarsResult<DataFrame>,不能忽略错误处理
  • group_by方法需要传入分组列的数组(即使是单列也要用["col_name"]的形式)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:32:05