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

如何在Python中对高基数变量按占比自动生成哑编码?

针对高占比类别生成哑编码的实现方案

当然可以只对占比≥2%的类别生成哑编码,先确认下符合条件的类别:总数据16494条,2%对应的阈值约为330条,你给出的统计里,USD(13695)、GBP(558)、EUR(406)都远超这个阈值,INR、CAD等小类别则不符合。

下面是具体的实现步骤(以Python Pandas为例):

  1. 筛选符合占比要求的类别
import pandas as pd

# 假设你的数据集存储在df中
# 计算各币种的占比(百分比)
currency_proportions = df['salary_currency'].value_counts(normalize=True) * 100
# 提取占比≥2%的币种列表
target_currencies = currency_proportions[currency_proportions >= 2].index.tolist()
  1. 生成目标类别的哑编码
    有两种常见处理方式:
  • 方式一:将小类别统一归为Other,再生成包含Other的哑编码
    这种方式能完整保留所有样本的信息,同时避免维度冗余:
# 新建列,把非目标币种替换为Other
df['salary_currency_grouped'] = df['salary_currency'].apply(
    lambda x: x if x in target_currencies else 'Other'
)
# 生成哑编码,drop_first=True可避免多重共线性问题
currency_dummies = pd.get_dummies(df['salary_currency_grouped'], prefix='currency', drop_first=True)
# 将哑编码合并到原数据集
df = pd.concat([df, currency_dummies], axis=1)
  • 方式二:仅为目标类别生成哑编码,小类别对应的哑编码列全为0
    这种方式不会新增Other类别,适合不需要保留小类别信息的场景:
# 生成所有币种的哑编码后,只保留目标类别对应的列
currency_dummies = pd.get_dummies(df['salary_currency'], prefix='currency').filter(
    [f'currency_{curr}' for curr in target_currencies]
)
# 合并到原数据集
df = pd.concat([df, currency_dummies], axis=1)

这样处理后,你就只得到了USD、GBP、EUR(或包含Other)的哑编码列,既精简了特征维度,又保留了主要类别的信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:36:06