如何在 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 │
└─────┴─────┴─────┴─────┘
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 │
└─────┴─────┴─────┴─────┘