如何将Pandas数据集中低频列值B、D合并为‘Others’?
解决Pandas列低频类别合并为'Others'的问题
没问题,这是个很常见的类别数据处理需求,我给你两种实用的方法,你可以根据场景选择:
方法一:直接指定要合并的类别(适合已知要合并的是B和D)
如果你已经明确知道要把B和D换成'Others',直接用replace()方法就能快速搞定:
# 把下面的'category'替换成你实际的目标列名 low_freq_vals = ['B', 'D'] df['category'] = df['category'].replace(low_freq_vals, 'Others')
这个方法简单直接,一步到位,适合已经确定目标类别的固定场景。
方法二:动态识别低频类别(适合自动筛选所有低频率值)
如果后续数据可能变化,或者你想自动把所有频率低于某个阈值的类别都合并成'Others',可以先计算频率再批量替换:
# 1. 计算目标列每个类别的占比(用value_counts(normalize=True),也可以用绝对计数) category_freq = df['category'].value_counts(normalize=True) # 2. 筛选出频率低于5%的类别(你可以根据需求调整阈值,比如0.03就是3%) low_freq_cats = category_freq[category_freq < 0.05].index.tolist() # 3. 把这些低频类别统一替换为'Others' df['category'] = df['category'].replace(low_freq_cats, 'Others')
实际效果示例
假设你的原始数据列是这样的:
| category |
|---|
| A |
| A |
| B |
| C |
| D |
| C |
| A |
用方法一处理后,结果会变成:
| category |
|---|
| A |
| A |
| Others |
| C |
| Others |
| C |
| A |
如果用方法二,只要B和D的频率低于你设定的阈值,结果也是一样的;如果之后新增了其他低频类别,这个方法会自动把它们也合并进去,灵活性更高。
小提示:如果你的目标列是Pandas的category类型(不是普通字符串),替换后可以用df['category'] = df['category'].cat.set_categories(df['category'].unique())重新整理类别,普通字符串列不需要这一步。
内容的提问来源于stack exchange,提问作者John_Rodgers
相关产品推荐
相关产品推荐

