Path: blob/main/docs/source/src/rust/user-guide/expressions/operations.rs
7889 views
fn main() -> Result<(), Box<dyn std::error::Error>> {1// --8<-- [start:dataframe]2use polars::prelude::*;34let df = df! (5"nrs" => &[Some(1), Some(2), Some(3), None, Some(5)],6"names" => &["foo", "ham", "spam", "egg", "spam"],7"random" => &[0.37454, 0.950714, 0.731994, 0.598658, 0.156019],8"groups" => &["A", "A", "B", "A", "B"],9)?;1011println!("{}", &df);12// --8<-- [end:dataframe]1314// --8<-- [start:arithmetic]15let result = df16.clone()17.lazy()18.select([19(col("nrs") + lit(5)).alias("nrs + 5"),20(col("nrs") - lit(5)).alias("nrs - 5"),21(col("nrs") * col("random")).alias("nrs * random"),22(col("nrs") / col("random")).alias("nrs / random"),23(col("nrs").pow(lit(2))).alias("nrs ** 2"),24(col("nrs") % lit(3)).alias("nrs % 3"),25])26.collect()?;27println!("{result}");28// --8<-- [end:arithmetic]2930// --8<-- [start:comparison]31let result = df32.clone()33.lazy()34.select([35col("nrs").gt(1).alias("nrs > 1"),36col("nrs").gt_eq(3).alias("nrs >= 3"),37col("random").lt_eq(0.2).alias("random < .2"),38col("random").lt_eq(0.5).alias("random <= .5"),39col("nrs").neq(1).alias("nrs != 1"),40col("nrs").eq(1).alias("nrs == 1"),41])42.collect()?;43println!("{result}");44// --8<-- [end:comparison]4546// --8<-- [start:boolean]47let result = df48.clone()49.lazy()50.select([51((col("nrs").is_null()).not().and(col("groups").eq(lit("A"))))52.alias("number not null and group A"),53(col("random").lt(lit(0.5)).or(col("groups").eq(lit("B"))))54.alias("random < 0.5 or group B"),55])56.collect()?;57println!("{result}");58// --8<-- [end:boolean]5960// --8<-- [start:bitwise]61let result = df62.clone()63.lazy()64.select([65col("nrs"),66col("nrs").and(lit(6)).alias("nrs & 6"),67col("nrs").or(lit(6)).alias("nrs | 6"),68col("nrs").not().alias("not nrs"),69col("nrs").xor(lit(6)).alias("nrs ^ 6"),70])71.collect()?;72println!("{result}");73// --8<-- [end:bitwise]7475// --8<-- [start:count]76use rand::distr::{Distribution, Uniform};77use rand::rng;7879let mut rng = rng();80let between = Uniform::new_inclusive(0, 100_000).unwrap();81let arr: Vec<u32> = between.sample_iter(&mut rng).take(100_100).collect();8283let long_df = df!(84"numbers" => &arr85)?;8687let result = long_df88.lazy()89.select([90col("numbers").n_unique().alias("n_unique"),91col("numbers").approx_n_unique().alias("approx_n_unique"),92])93.collect()?;94println!("{result}");95// --8<-- [end:count]9697// --8<-- [start:value_counts]98let result = df99.clone()100.lazy()101.select([col("names")102.value_counts(false, false, "count", false)103.alias("value_counts")])104.collect()?;105println!("{result}");106// --8<-- [end:value_counts]107108// --8<-- [start:unique_counts]109let result = df110.clone()111.lazy()112.select([113col("names").unique_stable().alias("unique"),114col("names").unique_counts().alias("unique_counts"),115])116.collect()?;117println!("{result}");118// --8<-- [end:unique_counts]119120// --8<-- [start:collatz]121let result = df122.lazy()123.select([124col("nrs"),125when((col("nrs") % lit(2)).eq(lit(1)))126.then(lit(3) * col("nrs") + lit(1))127.otherwise(col("nrs") / lit(2))128.alias("Collatz"),129])130.collect()?;131println!("{result}");132// --8<-- [end:collatz]133134Ok(())135}136137138