简单的数据透视表来计算唯一值

时间:2012-08-09 03:09:57

标签: excel excel-formula pivot-table

这似乎是一个简单的数据透视表来学习。我想为我正在分组的特定值计算唯一值。

例如,我有这个:

ABC   123
ABC   123
ABC   123
DEF   456
DEF   567
DEF   456
DEF   456

我想要的是一个数据透视表,向我展示了这个:

ABC   1
DEF   2

我创建的简单数据透视表只是给了我(计算了多少行):

ABC   3
DEF   4  

但我想要的是唯一值的数量。

我真正想要做的是找出第一列中哪些值在所有行的第二列中没有相同的值。换句话说,“ABC”是“好”,“DEF”是“坏”

我确信有一种更简单的方法可以做到这一点,但我想我会试试枢轴表......

16 个答案:

答案 0 :(得分:242)

更新:您现在可以使用Excel 2013自动执行此操作。我已将此创建为新答案,因为我之前的答案实际上解决了稍微不同的问题。

如果您有该版本,则选择您的数据以创建数据透视表,并在创建表时,确保选中“将此数据添加到数据模型”复选框(见下文)。

Tick the box next to 'Add this data to the Data Model'

然后,当您的数据透视表打开时,通常会创建行,列和值。然后单击要计算其不同计数的字段并编辑“字段值设置”: Edit field value settings

最后,向下滚动到最后一个选项,然后选择“Distinct Count”。 Choose the option 'Distinct Count'

这应该更新您的数据透视表值,以显示您正在寻找的数据。

答案 1 :(得分:105)

插入第3列并在单元格C2中粘贴此公式

=IF(SUMPRODUCT(($A$2:$A2=A2)*($B$2:$B2=B2))>1,0,1)

并将其复制下来。现在根据第1列和第3列创建您的数据透视表。见快照

enter image description here

答案 2 :(得分:9)

我想在混合中添加一个不需要公式的附加选项,但如果需要在两个不同的列中计算集合中的唯一值,则可能会有所帮助。使用原始示例,我没有:

ABC   123  
ABC   123  
ABC   123   
DEF   456  
DEF   567  
DEF   456  
DEF   456

并希望它显示为:

ABC   1  
DEF   2

但更像是:

ABC   123  
ABC   123  
ABC   123  
ABC   456  
DEF   123  
DEF   456  
DEF   567  
DEF   456  
DEF   456

并希望它显示为:

ABC  
   123    3  
   456    1  
DEF  
   123    1  
   456    3  
   567    1

我找到了将数据转换为此格式的最佳方法,然后能够进一步操作它是使用以下内容:

enter image description here

选择'Running total in'后,选择辅助数据集的标题(在这种情况下,它将是包含123,456和567的数据集的标题或列标题)。这将为您提供主数据集中该集合中项目总数的最大值。

然后我复制了这些数据,将其粘贴为值,然后将其放在另一个数据透视表中,以便更轻松地操作它。

仅供参考,我有大约25万行数据,因此这比一些公式方法要好得多,特别是那些尝试比较两列/数据集的方法,因为它不断使应用程序崩溃。

答案 3 :(得分:7)

执行“独特计数”的功能是Excel 2013的一部分,但未自动启用。

所以,如果你运行一个EXCEL 2013副本,这里有一个很好的方法来解决这个问题,而无需通过函数的麻烦:http://datapigtechnologies.com/blog/index.php/distinct-count-in-pivot-tables-finally-in-excel-2013/

答案 4 :(得分:5)

我发现最简单的方法是使用Distinct Count下的Value Field Settings选项(点击Values窗格中的字段)。 Distinct Count的选项位于列表的最底部。

Location of where to click

以下是之前(TOP;正常Count)和之后(BOTTOM; Distinct Count

COUNT

DISTINCT COUNT

答案 5 :(得分:4)

见Debra Dalgleish的Count Unique Items

enter image description here

答案 6 :(得分:3)

对于以下公式,不必对表进行排序,以便为每个存在的唯一值返回1。

假设问题中显示的数据的表格范围是A1:B7在单元格C1中输入以下公式:

=IF(COUNTIF($B$1:$B1,B1)>1,0,COUNTIF($B$1:$B1,B1))

将该公式复制到所有行,最后一行将包含:

=IF(COUNTIF($B$1:$B7,B7)>1,0,COUNTIF($B$1:$B7,B7))

这导致在第一次找到记录时返回1,之后所有时间返回0。

只需汇总数据透视表中的列

即可

答案 7 :(得分:2)

我解决这个问题的方法与我在这里看到的有点不同,所以我会分享。

  1. (首先复制您的数据)
  2. 连接列
  3. 删除连接列上的重复项
  4. 最后 - 在结果集
  5. 上进行转动

    注意:我想要包含图片,以便更容易理解但不能因为这是我的第一篇文章;)

答案 8 :(得分:1)

Siddharth的答案非常棒。

然而,这种技术在处理大量数据时会遇到麻烦(我的计算机冻结了50,000行)。一些处理器密集度较低的方法:

单一唯一性检查

  1. 按两列(本例中为A,B)
  2. 排序
  3. 使用查看较少数据的公式

    =IF(SUMPRODUCT(($A2:$A3=A2)*($B2:$B3=B2))>1,0,1) 
    
  4. 多重唯一性检查

    如果您需要检查不同列中的唯一性,则不能依赖两种类型。

    相反,

    1. 对单列(A)进行排序
    2. 添加涵盖每个分组的最大记录数的公式。如果ABC可能有50行,则公式为

      =IF(SUMPRODUCT(($A2:$A49=A2)*($B2:$B49=B2))>1,0,1)
      

答案 9 :(得分:1)

Excel 2013可以在枢轴中做Count。如果没有访问2013,并且数据量较少,我会制作原始数据的两个副本,而在副本b中,选择两个列并删除重复项。然后制作枢轴并计算您的列b。

答案 10 :(得分:1)

您可以将COUNTIFS用于多个条件,

= 1 / COUNTIFS(A:A,A2,B:B,B2)然后向下拖动。你可以在那里放置任意数量的标准,但它往往需要花费大量的时间来处理。

答案 11 :(得分:0)

您可以创建一个额外的列来存储唯一性,然后在数据透视表中汇总

我的意思是,单元格C1应始终为1。单元格C2应包含公式=IF(COUNTIF($A$1:$A1,$A2)*COUNTIF($B$1:$B1,$B2)>0,0,1)。复制此公式,以便单元格C3包含=IF(COUNTIF($A$1:$A2,$A3)*COUNTIF($B$1:$B2,$B3)>0,0,1),依此类推。

如果您有标题单元格,则需要将这些标题单元格连续移动,C3公式应为=IF(COUNTIF($A$2:$A2,$A3)*COUNTIF($B$2:$B2,$B3)>0,0,1)

答案 12 :(得分:0)

如果您对数据进行了排序..我建议使用以下公式

=IF(OR(A2<>A3,B2<>B3),1,0)

这更快,因为它使用更少的单元格来计算。

答案 13 :(得分:0)

我通常按照我需要的字段对数据进行排序,然后使用IF(A2 = A1,0,1);然后你得到每组ID的顶行1。简单,不需要任何时间来计算大型数据集。

答案 14 :(得分:0)

您也可以将VLOOKUP用于帮助列。我进行了测试,看上去比COUNTIF快一点。

如果您使用标题,并且数据从单元格A2开始,则在该行的任何单元格中都使用此公式并复制同一列中的所有其他单元格:

=IFERROR(IF(VLOOKUP(A2;$A$1:A1;1;0)=A2;0;1);1)

答案 15 :(得分:-3)

我找到了一种更简单的方法。参考Siddarth Rout的例子,如果我想计算A列中的唯一值:

  • 添加新列C并使用公式“= 1 / COUNTIF($ A:$ A,A2)填充C2”
  • 将公式拖到列的其余部分
  • 使用列A作为行标签进行数据透视,并使用值{列C列}来获取A列中唯一值的数量