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

如何用Polars将列中出现次数少于X次的值替换为指定值?

解决Polars中替换低频类别为"other"的问题

问题分析

你的Pandas代码逻辑是先统计列a的类别出现次数,再将出现次数少于50的类别替换为"other"。但Polars中不能直接在表达式里使用unique_counts()(这是Series方法,非表达式函数),导致你的尝试报错或结果不符。

正确实现方法

方法一:窗口函数(简洁直观)

利用窗口函数计算每个类别的出现次数,再通过when/then/otherwise进行替换:

df = df.with_columns(
    pl.when(pl.col("a").count().over(pl.col("a")) < 50)
    .then("other")
    .otherwise(pl.col("a"))
    .alias("a")
)
  • 逻辑:pl.col("a").count().over(pl.col("a"))会为每行计算对应a类别的总出现次数,之后判断该次数是否小于50,满足则替换为"other",否则保留原类别。

方法二:分组统计+左连接(大数据场景更高效)

先单独统计类别计数,再通过左连接匹配到原表,最后完成替换:

# 统计每个类别的出现次数
counts = df.group_by("a").agg(pl.count().alias("cnt"))
# 左连接+替换+清理临时列
df = df.join(counts, on="a", how="left").with_columns(
    pl.when(pl.col("cnt") < 50).then("other").otherwise(pl.col("a")).alias("a")
).drop("cnt")
  • 优势:分组统计后仅保留唯一类别与计数,再通过连接匹配,在数据量极大时比窗口函数更节省计算资源。

与Pandas逻辑的对应

两种方法均与你原Pandas代码逻辑一致:

  1. 先获取每个类别的出现次数
  2. 筛选出次数≥50的类别
  3. 将不在此范围内的类别替换为"other"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:20:02