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

如何按分组提取DataFrame中出现频率最高的行?

解决方法:提取分组中最常出现的水果记录

嘿,我来帮你搞定这个问题!你已经用df.groupby('col1')['col2'].value_counts()拿到了分组后的水果计数,接下来只需要几步就能提取每组里的最大值记录啦~

第一步:把计数结果转成结构化的DataFrame

value_counts()返回的是一个带层级索引的Series,我们先把它转成普通DataFrame,并重命名计数列:

import pandas as pd

# 还原你的原始DataFrame
data = {
    'col1': ['maria', 'eugene', 'eugene', 'maria', 'maria', 'eugene', 'maria'],
    'col2': ['apple', 'apple', 'banana', 'apple', 'pear', 'banana', 'apple']
}
df = pd.DataFrame(data)

# 生成分组计数并转成DataFrame
count_df = df.groupby('col1')['col2'].value_counts().reset_index(name='col3')

这时候count_df的结构是:

col1    col2  col3
0   maria   apple     3
1   maria    pear     1
2  eugene  banana     2
3  eugene   apple     1

第二步:提取每组的最大值记录

因为value_counts()默认会按计数降序排列,所以每组的第一条记录就是计数最多的那条。我们只需要按col1分组后取每组的第一行:

result = count_df.groupby('col1').head(1).reset_index(drop=True)

执行后你就能得到期望的结果:

col1    col2  col3
0   maria   apple     3
1  eugene  banana     2

额外补充:处理并列最大值的情况

如果某个人有多种水果的出现次数相同(比如maria的apple和pear都出现2次),上面的方法只会取第一个。如果需要保留所有并列的最大值记录,可以用transform来筛选:

# 筛选出每组中计数等于组内最大值的所有行
result = count_df[count_df.groupby('col1')['col3'].transform('max') == count_df['col3']].reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:42:30