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

如何用groupby().transform()求DataFrame分组众数?遇平局赋值'x'

解决方案

你的核心问题是分组求众数时,平局场景需要返回'x',但原代码直接取mode()的第一个元素,无法识别平局情况。

自定义函数实现逻辑

先定义处理单组的函数,通过判断众数数量识别平局:

def get_majority_vote(series):
    modes = series.mode()
    # 众数数量大于1则判定为平局,返回'x';否则返回唯一众数
    return 'x' if len(modes) > 1 else modes.iloc[0]

再通过groupby.transform将函数应用到每个分组:

import pandas as pd

lst = [["High", "A"], ["High", "A"], ["High", "B"],["Medium", "A"], ["Medium", "B"], ["Medium", "C"]]
df = pd.DataFrame(lst, columns =["Class", "Grade"])

df['Majority_vote'] = df.groupby('Class')['Grade'].transform(get_majority_vote)

运行后得到预期结果:

ClassGradeMajority_vote
HighAA
HighAA
HighBA
MediumAx
MediumBx
MediumCx

原代码问题说明

原代码lambda x: x.mode()[0]在平局时,x.mode()会返回包含所有众数的Series(比如Medium组返回['A', 'B', 'C']),取[0]只会拿到第一个元素,而非你预期的nan,因此无法区分平局场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:39:19