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

如何在Pandas中按name分组并提取sec列出现次数最多的值

提取Pandas分组中出现次数最多的元素

原始数据

先构造示例数据用于复现场景:

import pandas as pd

data = {
    'name': ['emp1', 'emp1', 'emp1', 'emp2', 'emp2', 'emp2', 'emp2'],
    'sec': ['a', 'a', 'b', 'a', 'b', 'c', 'c']
}
df = pd.DataFrame(data)

解决方案

这里提供几种高效方法直接得到目标结果,也包含基于你已有的分组计数的后续处理方案:

方法1:用value_counts+idxmax直接取高频元素

对每个name分组后的sec列做频率统计,idxmax会直接返回频率最高的元素:

result = df.groupby('name')['sec'].apply(lambda x: x.value_counts().idxmax()).reset_index(name='sec')

方法2:利用mode(众数)获取高频元素

众数本身就是分组内出现次数最多的元素,直接调用mode即可(若存在多个众数,取第一个结果):

result = df.groupby('name')['sec'].apply(lambda x: x.mode()[0]).reset_index(name='sec')

方法3:基于你已有的分组计数结果转换

如果你想基于df.groupby(['name','sec']).size()的结果继续处理,可按以下步骤:

# 将计数结果转为带列名的DataFrame
count_df = df.groupby(['name', 'sec']).size().reset_index(name='count')
# 按name分组,筛选出每组中count最大的行,再保留目标列
result = count_df.groupby('name').apply(lambda x: x.loc[x['count'].idxmax()]).reset_index(drop=True)[['name', 'sec']]

最终结果

执行任意方法后,都会得到你需要的格式:

name sec
0  emp1   a
1  emp2   c

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:50:33