kafka数据不丢失不重复_一题多解之提取不重复数据

073a1670f8581754a449a8c5a7a409b0.png

如上图,A列为原始内容,要将它们复制到C列,且重复内容只保留1次。

公式思路一:首先获取数字第一次出现的行号,再将他们做为INDEX或者OFFSET函数的第二参数。

获取数据第一次出现的行号,可以使用match或者frequency函数。

使用MATCH函数的写法为:

=IF(MATCH(A$2:A$11,A$2:A$11,)=ROW($1:$10),ROW($1:$10))。如果数据多次出现,match函数只会匹配第一次再现的位置,所以MATCH(A$2:A$11,A$2:A$11,)的结果为{1;2;3;3;5;5;7;7;3;10},如果是第一次出现,那么与行号(这里准确说应该是行号减1,因为第一行有标题)是对应的,非第一次出现,则与行号不对应。使用IF函数将第一次出现的行号筛选出来,最后结果为{1;2;3;FALSE;5;FALSE;7;FALSE;FALSE;10}。

下一步再使用small函数配合row函数,依次取出上面结果中的最小值=SMALL(IF(MATCH(A$2:A$11,A$2:A$11,)=ROW($1:$10),ROW($1:$10)),ROW(A1))。随着公式下拉,row(a1)变成row(a2)、row(a3)……,small函数最后就得到上一步结果中的次小值,第三小值……。然后做为index的第2参数,返回对应值。

=INDEX(A$2:A$11,SMALL(IF(MATCH(A$2:A$11,A$2:A$11,)=ROW($1:$10),ROW($1:$10)),ROW(A1)))

使用FREQUENCY函数与前面类似,使用FREQUENCY(A$2:A$11,A$2:A$11)判断数据是不是第一次出现,如果是第一次出现,则返回大于0的值,否则返回0。再使用INDEX+SMALL+IF+ROW函数得到最终结果,这里就不再详细分析了,直接写出公式为

=INDEX(A$2:A$11,SMALL(IF(FREQUENCY(A$2:A$11,A$2:A$11)>0,ROW($1:$11)),ROW(A1)))

公式思路二:可以先判断C列有没有A列的内容,如果没有,则自上而下依次取A列的值,如果有则忽略A列对应行的值。在C2中输入=INDEX(A$2:A$11,MIN(IF(COUNTIF(C$1:C1,A$2:A$11)=0,ROW($1:$10))))  其中COUNTIF(C$1:C1,A$2:A$11)用于判断A2:A11中的数据在C$1:C1中出现的次数,如果未出现,则取该行的行号,再取这些行号中的最小值做为INDEX的第二参数。

公式思路三:将该列数字处理为XML格式,使用XPATH参数来判断是否为第一次出现。由于filterxml函数非常用函数,且xpath内容纷繁多变,这里直接给出公式,感兴趣的同学可以自行学习一下filterxml函数。=INDEX(FILTERXML(""&TEXTJOIN("",,A$2:A$11)&"","//b[not(preceding::*=.+0)]"),ROW(A1))

思路四:除了公式Excel还提供了其它方便简单的解决方式。2007版本开始提供“删除重复值”按钮,只要选中该列,点一下数据选项卡中的“删除重复值”,即可得到要求的结果。如果源数据需要保留,可以先把它复制到新列再操作。

aaf6bae258ea2790d91773f034c6caef.gif

思路五:使用高级筛选功能的“选择不重复的记录”。操作如下

948138c0a24d586c54d4201fe9d0e252.gif

思路六:使用透视表,操作如下

d5c1798f7f1a49d9533e7778aca71981.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值