揭秘“众数”的力量:MODE函数从入门到精通实战攻略
在数据分析的浩瀚海洋中,平均值(AVERAGE)和中位数(MEDIAN)是大家熟悉的老朋友,但有时候,我们需要回答一个更直接的问题:“出现次数最多的那个值是什么?”

一家服装店想知道哪种尺码卖得最好,一个班级里最常见的分数是多少,或者一个城市中最受欢迎的蛋糕口味是什么。
这时,我们的主角——MODE函数(众数函数)就闪亮登场了,它专门用来寻找数据集中出现频率最高的那个值,也就是统计学中的“众数”。
这篇攻略将带你彻底掌握MODE函数,无论你是Excel小白还是Python老手,都能从中受益。
第一部分:MODE函数是什么?—— 基础概念
MODE函数就是“找多数”。
- 定义:MODE函数返回在某一数组或数据区域中出现频率最高的数值。
- 核心价值:它告诉我们“最普遍”的情况是什么,而不是“中间”或“平均”情况。
举个例子:
假设一个小组5人的年龄分别是:22, 23, 22, 25, 22。
- 平均值 = (22+23+22+25+22) / 5 = 22.8
- 中位数 = 22
- 众数MODE = 22 (因为它出现了3次)
在这个例子中,众数22完美地反映了这个小组的“典型年龄”。
第二部分:MODE函数的“双胞胎兄弟”—— MODE.SNGL 与 MODE.MULT
在Excel 2010及之后版本中,MODE函数有了更精确的替代者,理解它们的区别是成为高手的标志。
| 函数 | 名称 | 核心功能 | 适用场景 |
|---|---|---|---|
MODE |
老版众数 | 返回第一个出现的众数。 | 兼容旧版Excel,不推荐在新工作中使用。 |
MODE.SNGL |
单众数 | 返回第一个出现的众数。 | 绝大多数情况,当数据只有一个众数时。 |
MODE.MULT |
多众数 | 返回一个数组,包含所有众数。 | 数据集中有多个数值出现次数相同时。 |
实战技巧:
如果你不确定数据是否有多个众数,先用 MODE.MULT 测试一下,如果它只返回一个值,那就和 MODE.SNGL 没区别;如果返回多个值,恭喜你发现了更丰富的模式!
第三部分:在Excel中实战MODE函数
找到最畅销的产品(MODE.SNGL)
- 数据:一列销售记录,包含产品ID(A101, A102, A101, A103, A101...)。
- 需求:找出哪个产品卖得最多。
- 公式:在任意单元格输入
=MODE.SNGL(A2:A100)(假设A列是产品ID) - 结果:返回出现频率最高的那个产品ID。
发现多个最受欢迎的口味(MODE.MULT)
- 数据:一列订单,包含蛋糕口味(巧克力, 草莓, 香草, 巧克力, 香草, 草莓, 巧克力...)。
- 需求:找出所有最热门的口味,假设巧克力和香草都出现了10次,其他口味都小于10。
- 公式:选中多个连续的单元格(比如B1:B3),输入
=MODE.MULT(A2:A100),然后按Ctrl + Shift + Enter(数组公式)。 - 结果:B1和B2会显示“巧克力”和“香草”。
注意: MODE.MULT 是数组函数,需要一次选中多个单元格并按住特殊快捷键才能正确显示所有结果。
第四部分:在Python中实战MODE函数(Pandas库)
在数据分析的“瑞士军刀”Python Pandas中,操作MODE同样简单。
准备工作:
import pandas as pd data = pd.Series([85, 90, 85, 75, 90, 85])
获取众数:
# 1. 获取众数(结果是一个Series,可能包含多个值) mode_result = data.mode() print(mode_result) # 输出: # 0 85 # dtype: int64 # 2. 如果确定只有一个众数,可以直接提取 single_mode = data.mode()[0] print(single_mode) # 输出:85
处理多众数:
data_multi = pd.Series([1, 1, 2, 2, 3, 4]) mode_multi = data_multi.mode() print(mode_multi) # 输出: # 0 1 # 1 2 # dtype: int64
Pandas的 mode() 方法默认就会返回所有众数,非常智能。
第五部分:MODE函数的陷阱与注意事项
- 数据必须为数值:MODE函数家族主要针对数值数据,虽然在一些软件(如Excel)中也可以处理文本,但最规范的做法是配合
COUNTIF或其他文本函数使用,比如要判断“苹果”是否出现最多,可以用INDEX+MATCH+MODE的组合拳,但更推荐直接使用数据透视表或COUNTIF排名。 - 没有众数的情况:如果数据集中每个数值都只出现一次,MODE函数会返回 #N/A 错误,这意味着数据分布非常均匀,没有“最普遍”的选项。
- 众数的局限性:众数对分类数据(如颜色、品牌)非常有效,但对连续数据(如身高、收入)可能不太敏感,身高如果精确到厘米,可能每个人都不同,导致无众数,解决方法是先对数据进行分组(比如身高区间:150-155cm),再求众数。
- 异常值的影响:相比于平均值,众数几乎不受极端值的影响,公司有100个普通员工月薪5千,1个高管月薪500万,平均值会被拉高,但众数依然是5千,更真实地反映了多数人的收入水平(但这不能说明总体情况,需要结合其他指标)。
第六部分:MODE函数的高级应用——数据透视表的“作弊器”
在真正的商业分析中,最常用的找众数方法不是函数,而是数据透视表。
- 创建一个数据透视表。
- 将要分析的字段(如“产品ID”)拖到行区域。
- 将该字段再拖一次到值区域,并设置值为“计数”。
- 排序这个计数列,从大到小。
- 排名第一的,就是众数!
这比写公式直观得多,尤其适合非技术人员快速查看。
MODE函数是数据探索工具箱中的一把尖刀,它直击“大多数”的核心,通过它,我们不仅能回答“平均值是多少?”,更能回答“通常情况下,我们得到的是什么?”
记住以下清单,你就能快速上手:
- 找唯一骨干:用
MODE.SNGL或data.mode()[0]。 - 发现多个趋势:用
MODE.MULT或data.mode()。 - 避免踩坑:注意数据类型、处理无众数情况、善用分组。
打开你的数据,去发现那些被“多数”埋藏的秘密吧!