polars.fold#

polars.fold(
acc: IntoExpr,
function: Callable[[Series, Series], Series],
exprs: Sequence[Expr | str] | Expr,
) Expr[source]#

使用左折叠在多个列上水平/按行累积。

Parameters:
acc

累加器表达式。这是在折叠开始时初始化的值。例如,对于求和,这可以是lit(0)。

function

应用于累加器和值的函数。 Fn(acc, value) -> new_value

exprs

用于聚合的表达式。也可以是通配符表达式。

注释

如果你只想要第一个遇到的表达式作为累加器,考虑使用 reduce

示例

>>> df = pl.DataFrame(
...     {
...         "a": [1, 2, 3],
...         "b": [3, 4, 5],
...         "c": [5, 6, 7],
...     }
... )
>>> df
shape: (3, 3)
┌─────┬─────┬─────┐
│ a   ┆ b   ┆ c   │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╡
│ 1   ┆ 3   ┆ 5   │
│ 2   ┆ 4   ┆ 6   │
│ 3   ┆ 5   ┆ 7   │
└─────┴─────┴─────┘

对所有列进行水平求和并加1。

>>> df.select(
...     pl.fold(
...         acc=pl.lit(1), function=lambda acc, x: acc + x, exprs=pl.col("*")
...     ).alias("sum"),
... )
shape: (3, 1)
┌─────┐
│ sum │
│ --- │
│ i64 │
╞═════╡
│ 10  │
│ 13  │
│ 16  │
└─────┘

你也可以在所有列上应用条件/谓词:

>>> df = pl.DataFrame(
...     {
...         "a": [1, 2, 3],
...         "b": [0, 1, 2],
...     }
... )
>>> df
shape: (3, 2)
┌─────┬─────┐
│ a   ┆ b   │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪═════╡
│ 1   ┆ 0   │
│ 2   ┆ 1   │
│ 3   ┆ 2   │
└─────┴─────┘
>>> df.filter(
...     pl.fold(
...         acc=pl.lit(True),
...         function=lambda acc, x: acc & x,
...         exprs=pl.col("*") > 1,
...     )
... )
shape: (1, 2)
┌─────┬─────┐
│ a   ┆ b   │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪═════╡
│ 3   ┆ 2   │
└─────┴─────┘