在this handbook中,是一个如何利用函数polars::prelude::fold_exprs
来累积多列水平的行值的示例。
let df = df!(
"a" => &[1, 2, 3],
"b" => &[10, 20, 30],
)?;
let out = df
.lazy()
.select([fold_exprs(lit(0), |acc, x| Ok(Some(acc + x)), [col("*")]).alias("sum")])
.collect()?;
println!("{}", out);
输出为:
shape: (3, 1)
┌─────┐
│ sum │
│ --- │
│ i64 │
╞═════╡
│ 11 │
│ 22 │
│ 33 │
└─────┘
**问题:**如何使用fold_exprs
函数将单列col(b)
垂直的行值累加,得到以下输出:
shape: (3, 1)
┌─────┐
│ sum │
│ --- │
│ i64 │
╞═════╡
│ 10 │
│ 30 │
│ 60 │
└─────┘
我正在寻找类似的东西:
let out = df
.lazy()
.select([fold_exprs(lit(0), |acc, x| Ok(Some(acc + x)), [col("b")]).alias("sum")])
.collect()?;
在这里,我将col("*")
替换为col("b")
:如何修改闭包|acc, x| Ok(Some(acc + x))
以获得所需的输出?
1条答案
按热度按时间xriantvc1#
对于累计和,您可以只使用
cumsum(reverse: bool)
函数(需要特性cum_agg
)。对于任意累积函数,您可以下拉到
map
。