分组后如何获取众数列表中的最大值以得到唯一众数?
解决Pandas分组计算众数时取并列最大值的问题
问题场景
按user和session分组计算audio_score列的众数时,若存在多个并列众数,结果会返回列表(如[2,3,4,5]),需要将这类列表替换为其中的最大值,得到单一数值的结果。
当前输出
user session mode_score 98 1 5 2 4 3 5 4 5 5 [2, 3, 4, 5]
期望输出
user session mode_score 98 1 5 2 4 3 5 4 5 5 5
原代码
df = pd.DataFrame(df[['user', 'session', 'audio_score']].groupby(['user','session'])['audio_score'].agg(pd.Series.mode))
解决方案
自定义聚合函数,处理多众数的情况,直接返回众数中的最大值:
def get_max_mode(series): mode_result = series.mode() return mode_result.max() if len(mode_result) > 1 else mode_result.iloc[0] # 执行分组聚合并重置索引 df = df[['user', 'session', 'audio_score']].groupby(['user','session'])['audio_score'].agg(get_max_mode).reset_index()
说明
get_max_mode函数先计算当前分组的众数:如果结果包含多个值(并列众数),就取最大值;如果只有一个众数,直接返回该值。- 使用
reset_index()将分组后的索引转换为普通列,保持输出结构与期望一致。
内容的提问来源于stack exchange,提问作者Sophie Martusewicz
相关产品推荐
相关产品推荐

