Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/docs/source/src/rust/user-guide/expressions/folds.rs
7889 views
1
fn main() -> Result<(), Box<dyn std::error::Error>> {
2
// --8<-- [start:mansum]
3
use polars::lazy::dsl::sum_horizontal;
4
use polars::prelude::*;
5
6
let df = df!(
7
"label" => ["foo", "bar", "spam"],
8
"a" => [1, 2, 3],
9
"b" => [10, 20, 30],
10
)?;
11
12
let result = df
13
.clone()
14
.lazy()
15
.select([
16
fold_exprs(
17
lit(0),
18
PlanCallback::new(|(acc, val)| &acc + &val),
19
[col("a"), col("b")],
20
false,
21
None,
22
)
23
.alias("sum_fold"),
24
sum_horizontal([col("a"), col("b")], true)?.alias("sum_horz"),
25
])
26
.collect()?;
27
28
println!("{result:?}");
29
// --8<-- [end:mansum]
30
31
// --8<-- [start:mansum-explicit]
32
let acc = lit(0);
33
let f = |acc: Expr, val: Expr| acc + val;
34
35
let result = df
36
.clone()
37
.lazy()
38
.select([
39
f(f(acc, col("a")), col("b")),
40
fold_exprs(
41
lit(0),
42
PlanCallback::new(|(acc, val)| &acc + &val),
43
[col("a"), col("b")],
44
false,
45
None,
46
)
47
.alias("sum_fold"),
48
])
49
.collect()?;
50
51
println!("{result:?}");
52
// --8<-- [end:mansum-explicit]
53
54
// --8<-- [start:manprod]
55
let result = df
56
.clone()
57
.lazy()
58
.select([fold_exprs(
59
lit(0),
60
PlanCallback::new(|(acc, val)| &acc * &val),
61
[col("a"), col("b")],
62
false,
63
None,
64
)
65
.alias("prod")])
66
.collect()?;
67
68
println!("{result:?}");
69
// --8<-- [end:manprod]
70
71
// --8<-- [start:manprod-fixed]
72
let result = df
73
.lazy()
74
.select([fold_exprs(
75
lit(1),
76
PlanCallback::new(|(acc, val)| &acc * &val),
77
[col("a"), col("b")],
78
false,
79
None,
80
)
81
.alias("prod")])
82
.collect()?;
83
84
println!("{result:?}");
85
// --8<-- [end:manprod-fixed]
86
87
// --8<-- [start:conditional]
88
let df = df!(
89
"a" => [1, 2, 3],
90
"b" => [0, 1, 2],
91
)?;
92
93
let result = df
94
.lazy()
95
.filter(fold_exprs(
96
lit(true),
97
PlanCallback::new(|(acc, val)| &acc & &val),
98
[col("*").gt(1)],
99
false,
100
None,
101
))
102
.collect()?;
103
104
println!("{result:?}");
105
// --8<-- [end:conditional]
106
107
// --8<-- [start:string]
108
let df = df!(
109
"a" => ["a", "b", "c"],
110
"b" => [1, 2, 3],
111
)?;
112
113
let result = df
114
.lazy()
115
.select([concat_str([col("a"), col("b")], "", false)])
116
.collect()?;
117
println!("{result:?}");
118
// --8<-- [end:string]
119
120
Ok(())
121
}
122
123