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/transformations/pivot.rs
7889 views
1
// --8<-- [start:setup]
2
use polars::prelude::*;
3
// --8<-- [end:setup]
4
5
fn main() -> Result<(), Box<dyn std::error::Error>> {
6
// --8<-- [start:df]
7
let df = df!(
8
"foo"=> ["A", "A", "B", "B", "C"],
9
"bar"=> ["k", "l", "m", "n", "o"],
10
"N"=> [1, 2, 2, 4, 2],
11
)?;
12
println!("{}", &df);
13
// --8<-- [end:df]
14
15
// --8<-- [start:eager]
16
let out = df
17
.clone()
18
.lazy()
19
.pivot(
20
Selector::ByName {
21
names: [PlSmallStr::from("foo")].into(),
22
strict: true,
23
},
24
Arc::new(df!("" => ["A", "B", "C"])?),
25
Selector::ByName {
26
names: [PlSmallStr::from("bar")].into(),
27
strict: true,
28
},
29
Selector::ByName {
30
names: [PlSmallStr::from("N")].into(),
31
strict: true,
32
},
33
Expr::Agg(AggExpr::Item {
34
input: Arc::new(Expr::Element),
35
allow_empty: true,
36
}),
37
false,
38
"_".into(),
39
)
40
.collect()?;
41
println!("{}", &out);
42
// --8<-- [end:eager]
43
44
// --8<-- [start:lazy]
45
let q = df.clone().lazy();
46
let q2 = q.pivot(
47
Selector::ByName {
48
names: [PlSmallStr::from("foo")].into(),
49
strict: true,
50
},
51
Arc::new(df!("" => ["A", "B", "C"])?),
52
Selector::ByName {
53
names: [PlSmallStr::from("bar")].into(),
54
strict: true,
55
},
56
Selector::ByName {
57
names: [PlSmallStr::from("N")].into(),
58
strict: true,
59
},
60
Expr::Agg(AggExpr::Item {
61
input: Arc::new(Expr::Element),
62
allow_empty: true,
63
}),
64
false,
65
"_".into(),
66
);
67
let out = q2.collect()?;
68
println!("{}", &out);
69
// --8<-- [end:lazy]
70
71
Ok(())
72
}
73
74