在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
相关产品推荐
相关产品推荐

