多分类场景下不使用数据透视表计算各分类中位数的公式问题
按分类计算中位数的公式问题
我有一个包含**Categories(分类)和Values(数值)**列的表格,需要计算每个分类对应的中位数。尝试使用MEDIAN+IF组合公式,仅2个分类时有效,但3个分类(如下表数据)时失效。约束条件为不能使用数据透视表,我尝试的公式为:=IF(A2:A11="a",MEDIAN(B2:B11),IF(A2:A11="b",MEDIAN(B2:B11),IF(A2:A11="c",MEDIAN(B2:B11))))
用数据透视表添加度量值可实现需求,但不清楚当前公式的问题所在。
表格数据
| Categories | Values |
|---|---|
| a | 5 |
| b | 4 |
| c | 9 |
| c | 10 |
| b | 6 |
| a | 2 |
| c | 11 |
| b | 7 |
| a | 3 |
| b | 8 |
问题分析
你的公式存在两个核心问题:
MEDIAN(B2:B11)计算的是整个数值列的中位数,而非当前分类对应子集的中位数;- 嵌套
IF的逻辑错误,它没有筛选出对应分类的数值再计算,而是直接返回全列中位数,且数组场景下逻辑混乱。
正确解法
使用数组公式(Excel旧版本按Ctrl+Shift+Enter确认,365/2021及以上版本直接回车即可),通过IF筛选对应分类的数值后再计算中位数:
单个分类的中位数计算
- 分类
a的中位数:=MEDIAN(IF(A2:A11="a", B2:B11)) - 分类
b的中位数:=MEDIAN(IF(A2:A11="b", B2:B11)) - 分类
c的中位数:=MEDIAN(IF(A2:A11="c", B2:B11))
自动匹配每行分类的中位数
如果要在表格每行自动显示对应分类的中位数,使用绝对引用锁定数据范围:=MEDIAN(IF($A$2:$A$11=A2, $B$2:$B$11))
公式原理
IF(A2:A11="a", B2:B11)会生成一个数组:仅保留分类为a的数值,其他位置返回FALSE;MEDIAN函数会自动忽略FALSE值,仅计算有效数值的中位数。
内容的提问来源于stack exchange,提问作者Deepu Kumar
相关产品推荐
相关产品推荐

