Pandas DataFrame筛选唯一品牌且得分最高的前3款汽车实现方法
品牌去重取Top3汽车实现方案
问题原因
原代码存在两处明显缺陷:
- 未做品牌维度去重,直接排序取数导致同一品牌的多条记录被同时纳入结果
- 多余的
np.abs计算对正得分场景无意义,且默认升序排序取后3位的逻辑也未匹配结果顺序要求
实现代码
import pandas as pd df = pd.DataFrame({ 'car' : ['brand1_2020', 'brand2', 'brand3', 'brand1_2018', 'brand4'], 'score' : [5.2, 4.9, 5.0, 5.1, 4.1] }) # 提取统一品牌名 df['brand'] = df['car'].str.split('_').str[0] # 取每个品牌得分最高的记录索引 best_per_brand_idx = df.groupby('brand')['score'].idxmax() # 筛选后按得分降序取前3,再按升序排列得到预期顺序结果 cars_filtered = df.loc[best_per_brand_idx] \ .sort_values('score', ascending=False) \ .head(3) \ .sort_values('score')['car'] \ .tolist() print(cars_filtered)
运行输出:
['brand2', 'brand3', 'brand1_2020']
逻辑说明
- 提取品牌字段:通过字符串切分规则,将
品牌名_年份格式的car字段拆分为独立的品牌维度 - 单品牌最优筛选:按品牌分组后用
idxmax直接定位每个品牌得分最高的记录,避免同一品牌多条数据干扰 - 排序取数:先按得分降序筛选出最高的3条记录,再调整为升序排列即可完全匹配预期输出顺序,如果需要按得分从高到低输出,去掉最后一次升序排序的步骤即可
内容的提问来源于stack exchange,提问作者texasraj
相关产品推荐
相关产品推荐

