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

在Polars中能否在后续表达式中使用新创建的变量?

在Polars中实现类似dplyr mutate的链式变量引用
  • Polars的with_columns在单次调用里,所有列表达式都是基于原始DataFrame计算的,新创建的列无法被同一次调用里的后续表达式识别——这就是你触发ColumnNotFoundError的原因。和R中dplyr的mutate按顺序执行、允许直接引用刚生成的变量逻辑不同。

  • 要实现类似dplyr的效果,有两种常用方法:

    1. 拆分链式调用with_columns:把每个新列的创建拆成独立的with_columns调用,这样后续调用就能引用前一步生成的列。示例代码:
      import polars as pl
      
      df = pl.DataFrame({"nrs": [1, 2, 3]})
      df = (
          df.with_columns((pl.col("nrs") + 1).alias("nrs+1"))
            .with_columns((pl.col("nrs+1") + 1).alias("nrs+2"))
      )
      
    2. 使用select实现顺序引用:Polars的select支持在同一调用里引用前面定义的列别名,用这种方式可以在单次调用内完成递进计算。示例代码:
      import polars as pl
      
      df = pl.DataFrame({"nrs": [1, 2, 3]})
      df = df.select(
          pl.all(),
          (pl.col("nrs") + 1).alias("nrs+1"),
          (pl.col("nrs+1") + 1).alias("nrs+2")
      )
      
  • 补充:如果是复杂多步计算,链式with_columns的可读性更好;简单递进计算则用select更简洁。Polars的设计优先考虑批量计算的性能优化,所以默认不支持同一with_columns内的顺序引用,但通过上述方法完全可以实现和dplyr mutate一致的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:55:01