Path: blob/main/docs/source/src/rust/user-guide/expressions/folds.rs
7889 views
fn main() -> Result<(), Box<dyn std::error::Error>> {1// --8<-- [start:mansum]2use polars::lazy::dsl::sum_horizontal;3use polars::prelude::*;45let df = df!(6"label" => ["foo", "bar", "spam"],7"a" => [1, 2, 3],8"b" => [10, 20, 30],9)?;1011let result = df12.clone()13.lazy()14.select([15fold_exprs(16lit(0),17PlanCallback::new(|(acc, val)| &acc + &val),18[col("a"), col("b")],19false,20None,21)22.alias("sum_fold"),23sum_horizontal([col("a"), col("b")], true)?.alias("sum_horz"),24])25.collect()?;2627println!("{result:?}");28// --8<-- [end:mansum]2930// --8<-- [start:mansum-explicit]31let acc = lit(0);32let f = |acc: Expr, val: Expr| acc + val;3334let result = df35.clone()36.lazy()37.select([38f(f(acc, col("a")), col("b")),39fold_exprs(40lit(0),41PlanCallback::new(|(acc, val)| &acc + &val),42[col("a"), col("b")],43false,44None,45)46.alias("sum_fold"),47])48.collect()?;4950println!("{result:?}");51// --8<-- [end:mansum-explicit]5253// --8<-- [start:manprod]54let result = df55.clone()56.lazy()57.select([fold_exprs(58lit(0),59PlanCallback::new(|(acc, val)| &acc * &val),60[col("a"), col("b")],61false,62None,63)64.alias("prod")])65.collect()?;6667println!("{result:?}");68// --8<-- [end:manprod]6970// --8<-- [start:manprod-fixed]71let result = df72.lazy()73.select([fold_exprs(74lit(1),75PlanCallback::new(|(acc, val)| &acc * &val),76[col("a"), col("b")],77false,78None,79)80.alias("prod")])81.collect()?;8283println!("{result:?}");84// --8<-- [end:manprod-fixed]8586// --8<-- [start:conditional]87let df = df!(88"a" => [1, 2, 3],89"b" => [0, 1, 2],90)?;9192let result = df93.lazy()94.filter(fold_exprs(95lit(true),96PlanCallback::new(|(acc, val)| &acc & &val),97[col("*").gt(1)],98false,99None,100))101.collect()?;102103println!("{result:?}");104// --8<-- [end:conditional]105106// --8<-- [start:string]107let df = df!(108"a" => ["a", "b", "c"],109"b" => [1, 2, 3],110)?;111112let result = df113.lazy()114.select([concat_str([col("a"), col("b")], "", false)])115.collect()?;116println!("{result:?}");117// --8<-- [end:string]118119Ok(())120}121122123