查找最常用的值

查找最常用的值

我知道这个问题以前已经问过,但我的问题需要更具可扩展性的解决方案!

我有一个列G有各州的栏目,这个栏目里有 10,000 个州。

我需要找出最常见的状态。

通常的答案是: =INDEX($G:$G,MODE(MATCH($G:$G,$G:$G,0)))但在我看来这是不可接受的,这意味着 Excel 需要在 10,000 个单元格中进行 10,000 次查找(100,000,000 次操作),这只是最好的情况(因为 Excel 不以找出正确使用的范围而闻名)。

因为我的列有一个州列表,所以我想我可以稍微修改一下这个公式 =INDEX($G:$G,MODE(MATCH(state_list,$G:$G,0)))(其中 state_list 是一个州名称数组,这将产生 500,000 个操作,这是一个 200 倍的改进)。

然而,当我尝试计算这个时却出现#N/A错误。

我使用 F9 来检查MATCH(state_list,$G:$G,0)结果:{197,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A}

如果我错了请纠正我,这证明我正在使用数组公式?

如果是的话我做错了什么?

如何获得一种相对可扩展的方法来查找列中最常见的值(状态)G:G

谢谢

答案1

我还没有真正尝试过 10,000 行,但是尝试一下

=INDEX($S$1:$S$50, MATCH(MAX(COUNTIF($G$1:$G$10000,$S$1:$S$50)), COUNTIF($G$1:$G$10000,$S$1:$S$50), 0))

其中,唯一州值位于 中。(当然,这是一个数组公式;因此,输入时S1:S50需要键入Ctrl++ 。)ShiftEnter

  • COUNTIF($G$1:$G$10000,$S$1:$S$50)S1:S50计算每个州 ( ) 在 Column 中出现的次数G,从而生成一个包含 50 个数字的虚拟数组,这些数字的平均值为 200(因为它们的总和为 10,000)。请注意,此子表达式出现了两次,是的,在最坏的情况下,它需要 500,000 (50×10,000) 次比较 — 但平均而言,它只需要这个数字的一​​半。
  • MAX(COUNTIF($G$1:$G$10000,$S$1:$S$50))报告此虚拟数组中的最大数字。它将是一个 ≥ 200 的数字,表示最常出现的状态的频率(计数)。
  • MATCH( max_value , array_of_counts, 0) 查找虚拟数组中最大值的位置。该数字介于 1 到 50 之间,表示最常出现的状态。
  • INDEX($S$1:$S$50, state_number ) 给出最常见的状态的名称。

答案2

您的公式失败了,因为您引用的是整个列,而不是特定范围。这自然会发现最常见的值为空。

您可以使用这个(极不稳定的)函数来解决这个问题 -

=INDEX(INDIRECT("G1:G"&COUNTA(G:G)),MODE(MATCH(INDIRECT("G1:G"&COUNTA(G:G)),INDIRECT("G1:G"&COUNTA(G:G)),0)))

我不推荐这个。

对于你提到的项目数量,我会使用数据透视表 -

选择您的列,插入-数据透视表

行可以是您的状态,值是它们的数数。您可以排序来查找最常见的。

点击查看完整尺寸 在此处输入图片描述

相关内容