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

如何在Polars DataFrame中排除日期列替换超阈值值为0

Polars 替换指定列中超过阈值的值为0

你之前代码的问题

  • 第一段代码用pl.any_horizontal(pl.col(pl.Float32) > 20)会判断整行是否存在任意一个大于20的值,只要满足就把整行的Float32列全部置0,这和你要的「逐个元素判断」不符。
  • 第二段代码缺少otherwise分支,不满足条件的单元格会被设为null,且没有完整保留原列的逻辑。

正确实现方式

方式1:针对目标列逐元素判断

用with_columns遍历除date外的列(或指定Float32类型列),对每个元素单独判断:

# 针对所有Float32类型列(自动排除date列,假设date不是Float32)
df = df.with_columns(
    pl.col(pl.Float32)
    .when(pl.col(pl.Float32) > 20)
    .then(0)
    .keep_name()  # 保留原列名
)

# 明确排除date列(不管列类型)
df = df.with_columns(
    pl.col(exclude="date")
    .when(pl.col(exclude="date") > 20)
    .then(0)
    .keep_name()
)

方式2:类似Pandas的where写法

Polars支持和Pandas逻辑一致的where方法,满足条件保留原值,不满足则替换:

df = df.with_columns(
    pl.col(exclude="date").where(pl.col(exclude="date") <= 20, 0)
)

这里的逻辑是:当列值≤20时保留原值,否则替换为0,和你熟悉的Pandas写法逻辑对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 02:22:49