如何在 Rust 中将条件计算列添加到极坐标数据框中?

How to add a conditional computed col to polars dataframe in rust?

df1 有 ['a', 'b', 'c'] 3 列, 我想得到一个 df2 与 4 cols ['a', 'b', 'c', 'd']。 d 是这样计算的:

if a>5 {
  d = b + c 
} else if a<-5 {
  d = c - b + a
}  else {
  d = 3.0 * a
}

我怎样才能用锈迹斑斑的极地做这件事?可能对急切和懒惰都适用。

您可以使用 when -> then -> when -> then -> otherwise 表达式。请注意,您可以无限期地扩展 when, then,就像 else if 分支一样。

下面是一个例子:

use polars::df;
use polars::prelude::*;

fn main() -> Result<()> {
    let df = df![
        "a" => [2, 9, 2, 5],
        "b" => [1, 2, 3, 4],
        "c" => [4, 4, 8, 4],
    ]?;

    let out = df
        .lazy()
        .select([
            col("*"),
            when(col("a").gt(lit(5)))
                .then(col("b") + col("c"))
                .when(col("a").lt(lit(5)))
                .then(col("c") - col("b") + col("a"))
                .otherwise(lit(3) * col("a"))
                .alias("d"),
        ])
        .collect()?;

    println!("{}", out);

    Ok(())
}

这输出:

shape: (4, 4)
┌─────┬─────┬─────┬─────┐
│ a   ┆ b   ┆ c   ┆ d   │
│ --- ┆ --- ┆ --- ┆ --- │
│ i32 ┆ i32 ┆ i32 ┆ i32 │
╞═════╪═════╪═════╪═════╡
│ 2   ┆ 1   ┆ 4   ┆ 5   │
├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┤
│ 9   ┆ 2   ┆ 4   ┆ 6   │
├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┤
│ 2   ┆ 3   ┆ 8   ┆ 7   │
├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┤
│ 5   ┆ 4   ┆ 4   ┆ 15  │
└─────┴─────┴─────┴─────┘