我有一个这样的样本,我想找到最接近平均值的值
城市和体重是两个独立的列
city weight
A 23
A 22
A 45
A 97
B 34
B 22
B 23
C 76
C 23
C 23
我做了一个枢轴,计算了 A- 的平均体重,即 46.75
我需要找到最接近 A 的数字,在本例中是 45
我想我需要使用索引和匹配,但如果有 17,000 行具有重复的城市名称和不同的权重值,我该怎么做?
我将非常感激任何帮助
所以我正在寻找的答案是
Row Labels Average of WEIGHT nearest number
A 46.75 45
B 38.75 34
C 23 23
大多数类似的答案都没有使用这个集合,请帮我设置这个我已经尝试过的公式:
INDEX(rawdata,MATCH(MIN(ABS(weight-$B2)),ABS(weight-$B2),0),2)
但是它会查看 AC 的整个权重数组。我只希望它在比较 A 的平均值时查看 A 的值,
然后比较 B 的平均值时 B 的权重,
等等....
请告诉我我的公式有什么问题?
提前致谢
答案1
编辑:
抱歉,我没有很好地理解你的问题,现在才意识到你明确表示要找到最接近Weight
平均值的值城市价值之一计算平均值时。因此,我在下面更新了答案。
看起来你找到了XOR LX 的答案对于类似的问题,您几乎回答正确了。
MATCH()
XOR LX 使用了一个非常巧妙的小公式,可以绕过搜索无序数据时的限制。我将在下面解释它的工作原理。
在下面显示的数据表中,我使用以下方法计算了平均值:
=AVERAGEIF(A$2:A$11,A14,B$2:B$11)
(我得到的答案与您上面所示的不同)。
最接近Weight
平均值的是:
=INDEX((A$2:A$11=A14)*(B$2:B$11),MATCH(TRUE,(A$2:A$11=A14)*ABS(B$2:B$11-B14)=MIN(IF(A$2:A$11=A14,ABS(B$2:B$11-B14))),0))
请注意,这是一个数组公式,因此必须用 来输入CTRLShiftEnter,而不仅仅是Enter。
______________________________________________________________________________
怎么运行的:
ABS(B$2:B$11-B14)
是平均值与列表中所有数字之间的差值的数组Weight
。(A$2:A$11=A14)
是等于 的值的数组。将这True/False
两个相乘得到对应于 的位置的差值的数组,其余位置的差值。True
City
A14
City = A14
0
接下来我们要找到这些差异中的最小值,但我们必须创建一个略有不同的数组,因为如果数组中 有的话MIN()
就会返回。0
0's
IF(A$2:A$11=A14,ABS(B$2:B$11-B14))
检查其中,并返回这些位置与其他地方的和平均值City = A14
之间的差值。Weight
False
取该数组的最小值,MIN(IF(A$2:A$11=A14,ABS(B$2:B$11-B14)))
得出最小的差异仅限那些位置 City = A14
。
现在,等式给出了当前 的最小差异位置上的值(A$2:A$11=A14)*ABS(B$2:B$11-B14)=MIN(IF(A$2:A$11=A14,ABS(B$2:B$11-B14)))
的数组。 找到 的位置(即最接近的数字的位置),并将其输入到以返回实际值。True/False
True
City
MATCH()
True
INDEX()
我希望这个帮助能祝你好运。