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

Pandas:将数据列中出现次数少于10次的稀有值替换为‘RARE’

解决Pandas DataFrame稀有值替换问题

嘿,我来帮你搞定这个问题!你原来的思路方向是对的,但在调用value_counts()的时候没指定具体列,而且在lambda里重复计算频次的做法效率很低,还容易出问题。下面给你几种靠谱的实现方式:

方法一:预计算频次+字典映射(直观高效)

先一次性计算好目标列的频次,再创建映射字典来替换值,这样避免重复计算,性能更好:

# 第一步:计算LocationNormalized列各值的出现频次
loc_freq = df["LocationNormalized"].value_counts()

# 第二步:创建映射规则:出现次数<10的替换为"RARE",否则保留原值
rare_mapping = {location: "RARE" if count < 10 else location for location, count in loc_freq.items()}

# 第三步:应用映射到目标列
df["LocationNormalized"] = df["LocationNormalized"].map(rare_mapping)

方法二:用mask方法一行搞定(简洁优雅)

Pandas的mask()方法可以直接把满足条件的元素替换成指定值,代码更简洁:

loc_freq = df["LocationNormalized"].value_counts()
df["LocationNormalized"] = df["LocationNormalized"].mask(
    df["LocationNormalized"].map(loc_freq) < 10, 
    "RARE"
)

这里mask()的逻辑是:如果第一个参数的条件为True(即该值的出现次数<10),就把对应位置的元素替换成第二个参数"RARE",否则保持原值。

为什么你的原代码有问题?

你原来写的df.value_counts()[x]有两个问题:

  1. df.value_counts()是对整个DataFrame的行组合计数,而你需要的是单列的频次,应该写成df["LocationNormalized"].value_counts()[x];
  2. 在apply()的lambda里每次都调用value_counts(),会重复计算几百/几千次,数据量大的时候会非常慢,预计算频次再复用才是正确的做法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:16:15