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

如何在Pandas中基于rating最大频次对brand分组去重?

解决方案

你之前的两种方法都没命中需求:

  • df.groupby(["brand",'rating']).max().reset_index() 是按品牌+评分的组合分组,结果仍会保留同一品牌的多条记录,没实现品牌去重;
  • df.drop_duplicates(subset=['brand'], keep='last') 只是保留每个品牌的最后一行,完全没考虑评分的频次。

下面是几种能得到预期结果的方法:

方法1:用value_counts取频次最高值

按品牌分组后,对每个组的rating做频次统计,取频次最高的那个值:

import pandas as pd

df = pd.DataFrame({
     'brand': ['Yum Yum', 'Yum Yum', 'Yum Yum', 'Indomie', 'Indomie', 'Indomie', 'Cup','Pack'],
     'rating': [1, 1, 0, 1, 0, 0, 1, 0]})

# 分组后取每个品牌rating的最高频次值
result = df.groupby('brand')['rating'].agg(lambda x: x.value_counts().idxmax()).reset_index()
print(result)

输出结果:

brand  rating
0      Cup       1
1  Indomie       0
2      Pack       0
3  Yum Yum       1

方法2:直接用众数mode

因为rating是二元字段,众数就是出现次数最多的值,用mode方法更简洁:

result = df.groupby('brand')['rating'].agg(pd.Series.mode).reset_index()
print(result)

这个方法的输出和预期完全一致。

方法3:先统计频次再筛选

如果需要查看频次的话,可以先计算每个品牌-评分组合的出现次数,再按品牌筛选出频次最高的行:

# 计算每个brand-rating组合的出现次数
counts = df.groupby(['brand', 'rating']).size().reset_index(name='count')
# 按品牌分组,保留count最大的行
result = counts.loc[counts.groupby('brand')['count'].idxmax(), ['brand', 'rating']]
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:52:23