polars.fold#
- polars.fold(
- acc: IntoExpr,
- function: Callable[[Series, Series], Series],
- exprs: Sequence[Expr | str] | Expr,
使用左折叠在多个列上水平/按行累积。
- 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 │ └─────┴─────┘