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

如何在Polars中无需循环批量对多列使用when-then-otherwise

高效实现Polars DataFrame批量列修改

当然可以,你可以利用Polars的批量列处理能力,只计算一次判断条件就能完成所有目标列的修改,完全不需要原生Python循环,执行效率更高。

优化后的代码

import polars as pl

df = pl.DataFrame({
    'item':         ['CASH', 'CHECK', 'DEBT', 'CHECK', 'CREDIT', 'CASH'],
    'quantity':     [100, -20, 0, 10, 0, 0],
    'value':        [99, 47, None, 90, None, 120],
    'value_other':  [97, 57, None, 91, None, 110],
    'value_other2': [94, 37, None, 93, None, 115],
})

# 定义需要处理的value类列
target_cols = ['value', 'value_other', 'value_other2']
# 只计算一次判断条件
condition = pl.col('value').is_null() & (pl.col('quantity') == 0)

# 批量应用逻辑到所有目标列
df = df.with_columns(
    pl.col(target_cols).when(condition).then(0).otherwise(pl.col(target_cols))
)

print(df)

效果说明

这段代码会输出和你原方案完全一致的结果,但核心优势在于:

  • 条件表达式condition仅计算一次,避免了原方案中每个列重复计算条件的冗余操作
  • 通过pl.col(target_cols)一次性选中所有目标列,用Polars内部的批量处理逻辑替代原生循环,执行效率更高
  • 代码结构更简洁,可读性更强

内容的提问来源于stack exchange,提问作者Phil-ZXX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 01:45:02