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

Polars中如何对列表指定的多列批量执行乘-1运算

Polars 基于列名列表批量对多列应用相同运算的实现方案

问题场景

需要将Polars DataFrame中var_3、var_4列的值乘以-1,逐列硬编码写表达式可以正常运行,但待处理列数较多时,希望通过列名列表完成批量操作。

逐列操作的参考代码:

import polars as pl

df = pl.DataFrame({
    "var_1": ["a", "a", "b"],
    "var_2": ["c", "d", "e"], 
    "var_3": [1, 2, 3],
    "var_4": [4, 5, 6]
})

df.with_columns([
    pl.col("var_3") * -1, 
    pl.col("var_4") * -1
])

运行后输出符合预期的结果:

shape: (3, 4)
┌───────┬───────┬───────┬───────┐
│ var_1 ┆ var_2 ┆ var_3 ┆ var_4 │
│ ---   ┆ ---   ┆ ---   ┆ ---   │
│ str   ┆ str   ┆ i64   ┆ i64   │
╞═══════╪═══════╪═══════╪═══════╡
│ a     ┆ c     ┆ -1    ┆ -4    │
│ a     ┆ d     ┆ -2    ┆ -5    │
│ b     ┆ e     ┆ -3    ┆ -6    │
└───────┴───────┴───────┴───────┘

尝试的批量写法未生效,代码如下:

var_list = ["var_3", "var_4"]
pl_cols_var_list = [pl.col(k) for k in var_list]
df.with_columns(pl_cols_var_list * -1)

错误原因

pl_cols_var_list是普通Python列表,直接对Python列表执行* -1不属于Polars的表达式运算逻辑,属于Python层面的无效操作,因此不会触发预期的列值计算。

正确写法

推荐写法:直接给pl.col()传入列名列表

Polars原生支持pl.col()接收列名列表参数,传入后会自动对列表内所有列统一应用后续的运算逻辑,性能最优,代码最简洁:

var_list = ["var_3", "var_4"]
result = df.with_columns(pl.col(var_list) * -1)

灵活写法:列表推导式逐列生成运算表达式

如果后续需要给不同列加差异化处理逻辑,可以在列表推导式中直接对每个列对象应用运算,再传入with_columns:

var_list = ["var_3", "var_4"]
result = df.with_columns([pl.col(col_name) * -1 for col_name in var_list])

两种写法的运行结果和逐列硬编码的效果完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:51:21