You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Polars中高效链式调用多个with_columns转换?

解决Polars链式多列转换的简洁方法

在Polars里,你不用每次with_columns后都重新赋值DataFrame,有两种更符合Polars惯用风格的高效实现方式:

方法1:链式调用with_columns

直接把多个with_columns调用连在一起,Polars的API设计天然支持这种链式操作,代码更简洁,逻辑流程也清晰:

import polars as pl

exampledata = {
    'A': [1, 2, 3],
    'B': [4, 5, 6]
}

df = pl.DataFrame(exampledata).with_columns(
    (pl.col("A") + pl.col("B")).alias("C")
).with_columns(
    (pl.col("C") * pl.col("B")).alias("D")
)

print(df)

这种方式本质上和你原来的分步赋值执行逻辑一致,但省去了重复的df =赋值,代码更紧凑。

方法2:用pl.let在单次with_columns中处理依赖列

如果想在同一个with_columns调用里完成所有转换,Polars的pl.let函数可以帮你定义中间变量,解决同一次调用中无法引用新创建列的问题,适合逻辑复杂的多列依赖场景:

import polars as pl

exampledata = {
    'A': [1, 2, 3],
    'B': [4, 5, 6]
}

df = pl.DataFrame(exampledata).with_columns(
    pl.let(
        # 定义中间变量C的表达式
        c_expr = pl.col("A") + pl.col("B"),
        # 基于中间变量定义D的表达式
        d_expr = c_expr * pl.col("B"),
        # 返回要添加的列
        then = [c_expr.alias("C"), d_expr.alias("D")]
    )
)

print(df)

pl.let允许你在同一个上下文里复用中间表达式,既减少了方法调用次数,又能清晰梳理列之间的依赖关系。

补充说明

Polars在单次with_columns调用中,所有列表达式是并行计算的,所以同一次调用里新创建的列无法被其他表达式直接引用——这就是你之前遇到问题的原因。上面两种方法分别通过"拆分调用链"和"预定义中间表达式"的方式,完美解决了这个问题。

内容的提问来源于stack exchange,提问作者Simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 00:05:54