You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Power Query中去除扁平化交叉表反转列重复行的方法

解决Power Query中列值反转的重复行去重问题

嘿,我明白你的需求了——就是要去掉那些「列1和列2值互换」的重复行,只保留唯一的一组对吧?之前你尝试的方法方向偏了,咱们换个更直接的Power Query专属思路来搞定它。

核心思路

给每一对「互为反转」的行生成一个统一的唯一标识:不管列1和列2的顺序如何,让它们生成的标识完全相同。之后只要根据这个标识去重,就能轻松剔除重复的反转行。

具体操作步骤

假设你的两列叫列1列2,跟着下面的步骤来:

  1. 添加自定义标识列

    • 在Power Query编辑器中,点击顶部菜单栏的「添加列」→「自定义列」

    • 在弹出的公式框里输入以下公式(可以根据你的列名修改,分隔符用|或者其他不会和内容冲突的符号都行):

      = Text.Combine(List.Sort({[列1], [列2]}), "|")
      

      这个公式的作用是:把列1列2的值放进一个列表,排序后再拼接成字符串。比如(A,B)(B,A)都会生成A|B,完美统一标识。

      如果你的列是数值类型,可以用这个更稳妥的公式:

      = Text.From(List.Min({[列1], [列2]})) & "|" & Text.From(List.Max({[列1], [列2]}))
      
  2. 根据标识列去重

    • 选中刚生成的自定义列,点击顶部菜单栏的「开始」→「删除重复项」
    • 此时Power Query会自动剔除所有标识重复的行,只保留每组反转行中的第一行。

为什么你之前的方法不对?

你之前新建newCol1 = Col1+2newCol2 = Col2+1的逻辑,其实是在找满足Col1+2 = Col2+1(也就是Col1 = Col2-1)的行,这和「去除反转重复行」的需求完全不匹配,自然只能筛选出特定关系的行啦。

示例效果

比如你原数据是这样:

列1列2
苹果香蕉
香蕉苹果
橙子
橙子
西瓜西瓜

生成标识列后,前两行的标识都是苹果|香蕉,中间两行是橙子|梨,最后一行是西瓜|西瓜。删除重复项后,就会只剩下:

列1列2
苹果香蕉
橙子
西瓜西瓜

内容的提问来源于stack exchange,提问作者duncan.idahopotato

火山引擎 最新活动