Python新手求助:如何将DataFrame的car列Top10外类别合并为Miscellaneous
解决方法:保留高频汽车品牌,其余合并为"Miscellaneous"
别担心,作为Python新手遇到这种数据处理问题很正常,我来一步步帮你搞定:
第一步:获取出现频次最高的前10个汽车品牌
首先我们需要从car列里筛选出频次最高的前10个品牌,用value_counts()就能轻松实现:
# 获取前10个高频品牌的列表 top_10_cars = car_sales['car'].value_counts().head(10).index.tolist()
value_counts()会按频次从高到低返回品牌计数,head(10)取前10个,index.tolist()把这些品牌转成列表格式,方便后续判断。
第二步:替换低频品牌为"Miscellaneous"
你之前尝试用字典的思路是对的,但字典的写法有误(字典要求键值对一一对应,不能一个键对应多个值)。这里给你两种简单高效的实现方式:
方法1:用numpy.where(推荐,代码简洁)
numpy.where可以快速完成条件判断替换:
import numpy as np # 条件:如果car在top_10_cars里,保留原值;否则替换为"Miscellaneous" car_sales['car'] = np.where(car_sales['car'].isin(top_10_cars), car_sales['car'], 'Miscellaneous')
方法2:用pandas.replace
如果更习惯用字典映射,可以先构建一个替换字典,把所有非top10的品牌映射到"Miscellaneous":
# 先创建保留品牌的映射(品牌→自身) mapping = {car: car for car in top_10_cars} # 再把所有不在top10里的品牌添加到字典,映射为"Miscellaneous" for car in car_sales['car'].unique(): if car not in top_10_cars: mapping[car] = 'Miscellaneous' # 执行替换 car_sales['car'] = car_sales['car'].replace(mapping)
验证结果
替换完成后,你可以用下面的代码检查结果是否符合预期:
print(car_sales['car'].unique())
输出里应该只会看到前10个品牌和"Miscellaneous"啦~
内容的提问来源于stack exchange,提问作者Ashish Chaudhary
相关产品推荐
相关产品推荐

