悠悠楠杉
PolarsLazyFrame列级相乘的实现方法
python
import polars as pl
lf = pl.LazyFrame({
"price": [10.5, 20.0, 15.8],
"quantity": [2, 3, 1]
})
result = lf.withcolumns(
(pl.col("price") * pl.col("quantity")).alias("totalcost")
)
这里,pl.col("price") * pl.col("quantity") 构建了一个表达式,表示对 price 和 quantity 两列进行逐元素相乘。.with_columns() 方法将该表达式的结果作为新列添加到原始框架中。值得注意的是,此时并没有实际的数据计算发生,整个操作仍处于“计划”阶段。
LazyFrame 的强大之处在于它能自动优化这类表达式。例如,如果你只关心 total_cost 这一列,Polars 可以通过列投影优化,仅加载 price 和 quantity 两列,而忽略其他无关字段,从而节省 I/O 和内存开销。此外,如果后续还有过滤条件(如 .filter(pl.col("total_cost") > 30)),Polars 还可能将过滤操作下推到数据源层面,进一步提升性能。
除了简单的两列相乘,Polars 的表达式系统还支持更复杂的组合。例如,你可以链式地进行多列运算:
python
result = lf.with_columns(
total=pl.col("price") * pl.col("quantity"),
weighted_price=pl.col("price") * pl.lit(0.9) # 乘以常数
)
其中 pl.lit(0.9) 表示一个字面量(literal),可用于与列进行标量乘法。这种灵活性使得 Polars 能够轻松应对各种业务场景下的列运算需求。

