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

Pandas高基数installer变量如何批量合并非前三类为other

高基数分类变量Top类别自动保留+其余归集为other的实现方案

原有循环代码的核心问题

  • 判断逻辑存在本质错误:循环内的if unique != 'DWE' or unique != 'Government' or unique != 'RWE'条件永远为真。因为任意一个值不可能同时等于三个字符串,即便是目标保留的'DWE',判断时“不等于Government”这一项也会返回True,最终导致所有值都会被替换为'other',没有任何类别能被留下。
  • 操作方式冗余:即便修正判断连接词为and,依然是手动写死了需要保留的类别值,没有实现“自动取占比前三”的目标,和之前手动列值做replace的操作复杂度没有区别。
  • 执行效率极低:两千多个类别的场景下,每循环一次就对全表做一次replace操作,大数据量下会出现明显卡顿。

可直接落地的实现步骤

全程不需要手动罗列需要替换的类别值,自动完成占比统计、Top类别筛选、剩余值合并的全流程:

  1. 自动提取占比排名前三的类别
    直接调用pandas内置的占比统计方法,无需手动整理类别列表:
    # 统计installer变量的类别占比,自动取Top3的类别名
    top3_keep = df['installer'].value_counts(normalize=True).head(3).index.tolist()
    
    针对你给出的占比分布,这段代码会自动算出['DWE', 'Government', 'RWE']的结果,和手动列值的结果完全一致。
  2. 向量化完成剩余类别合并
    替代逐值循环的低效操作,一次性完成全量数据的替换:
    import numpy as np
    df['installer'] = np.where(
        df['installer'].isin(top3_keep),  # 判断是否属于需要保留的Top3类别
        df['installer'],  # 属于的话保留原值
        'other'  # 不属于的话统一替换为other
    )
    

复用说明

这套逻辑可以直接套用到你另一个高基数分类变量上,只需要替换对应列名即可,不需要重新统计类别、手动列值:

# 示例:处理另一个高基数变量,比如列名为'manufacturer'
top3_other = df['manufacturer'].value_counts(normalize=True).head(3).index.tolist()
df['manufacturer'] = np.where(df['manufacturer'].isin(top3_other), df['manufacturer'], 'other')

注意事项

  • 如果需要保留原数据中的缺失值,可以在判断条件中追加非空校验,避免缺失值被误归集到'other'
  • 如果需要保留的Top类别数量调整,只需要把head(3)改成对应数字即可,核心逻辑不需要改动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 03:36:05