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

在Polars中能否基于同一组条件批量创建多列?

在Polars中能否基于同一组条件批量创建多列?

当然可以啦!完全不用给每一列单独写when.then.otherwise,用Polars的struct配合条件判断就能一次性生成多列,既简洁又能避免重复写条件的麻烦~

就拿你给出的Python逻辑来说,我们可以把满足条件和不满足条件时的多列值分别打包成struct,然后通过一次条件判断生成这个struct列,最后把它拆成单独的列就行。具体代码示例如下:

import polars as pl

# 先创建一个示例DataFrame
df = pl.DataFrame({
    "x": [1, 2, 1],
    "y": [3, 3, 2],
    "w": [300*50, 300*200, 300*80],
    "z": [50, 200, 80]
})

# 批量生成多列的核心代码
result_df = df.with_columns(
    pl.when(
        (pl.col("x") == 1) & 
        (pl.col("y") == 3) & 
        (pl.col("w") == 300 * pl.col("z")) & 
        (pl.col("z") < 100)
    ).then(
        # 满足条件时的多列值打包成struct
        pl.struct(
            tot=pl.lit(300),
            work=pl.lit(400),
            sie=pl.lit(500),
            walk=pl.lit("into")
        )
    ).otherwise(
        # 不满足条件时的多列值打包成struct,这里可以引用其他列计算
        pl.struct(
            tot=pl.lit(350),
            work=400 * pl.col("tot"),
            sie=pl.col("tot") / 1000,
            walk=pl.lit("outof")
        )
    ).alias("temp_struct")
).unnest("temp_struct")  # 把struct列拆成单独的列

print(result_df)

这里还有几个小细节要注意:

  • 条件里的每一个判断都要用括号括起来,避免逻辑运算优先级的问题
  • 用pl.lit()来包装常量值,确保Polars能正确识别数据类型
  • 最后用.unnest()把struct列展开成独立的列,就能得到你需要的四个新变量

这种方法的好处是只需要写一次条件,不用重复写四次when.then.otherwise,不仅代码更整洁,还能减少出错的概率哦~

备注:内容来源于stack exchange,提问作者catquas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:43:01