检查 B 列中的值是不是存在于 A 列中
Posted
技术标签:
【中文标题】检查 B 列中的值是不是存在于 A 列中【英文标题】:Check if value in column B exists in column A检查 B 列中的值是否存在于 A 列中 【发布时间】:2019-10-08 15:16:04 【问题描述】:在 Power BI 中使用 Power Query,如果 B
列中的值存在于 A
列中,我需要检查 MyTable
的每一行。
如果是,则应在新列上返回该值,然后应在该列上返回一个空字段。
这是我试图以某种方式输入 if 语句的代码:
Table.Contains(MyTable,[B],[A])
这会导致循环引用错误。
【问题讨论】:
【参考方案1】:一种简单的方法就是将表格合并到自身上
Home..Merge Queries ... 并将 Table1 合并到 Table1(Current),然后单击顶部的 ColumnB 和底部的 ColumnA。使用新列顶部的箭头展开结果,然后仅选择 [x] ColumnA。
示例代码
let Source = Excel.CurrentWorkbook()[Name="Table1"][Content],
#"Merged Queries" = Table.NestedJoin(Source,"Column2",Source,"Column1","Source",JoinKind.LeftOuter),
#"Expanded Source" = Table.ExpandTableColumn(#"Merged Queries", "Source", "Column1", "Column1.1")
in #"Expanded Source"
【讨论】:
PQ 中的所有连接都使用“NestedJoin”功能。这绝对是一个非常有效和快速的检查,但也可能导致问题,具体取决于 A 列和 B 列中的数据。如果 A 列中有任何重复值,那么它将通过扩展连接操作创建重复行。如果是这种情况,您将希望添加一个自定义列来检查连接结果是否为空表并将值保留在 B 中或返回空白,而不是扩展连接结果。【参考方案2】:我不知道你想要这些结果在哪里,所以我只是将它作为附加列添加到理论样本表中。
鉴于此表:
还有这段代码:
let
Source = Excel.CurrentWorkbook()[Name="Table1"][Content],
#"Added Custom" = Table.AddColumn(Source, "C", each if List.Contains(Source[A], [B]) then [B] else null)
in
#"Added Custom"
给出这个结果:
【讨论】:
感谢您的帮助,我收到错误消息“无法将值...转换为 List 类型,A 列和 B 列属于文本类型。 此解决方案运行良好。如果你写的是[A]
而不是Source[A]
,它会给你这个错误。后者是一个列表,而前者是一个单元格值。
这个确切的代码只适用于我在这里展示的示例。我不知道您的数据是什么样的,所以我不能说您需要在那里更改什么,但是“Source [A]”应该是对表中列的引用(您正在检查是否B中的值存在于)。以上是关于检查 B 列中的值是不是存在于 A 列中的主要内容,如果未能解决你的问题,请参考以下文章
检查一列中的值是不是存在于另一列中,如果存在,则将另一列中的值复制到新列中
检查给定列表中的元素是不是存在于 DataFrame 的数组列中
检查列 pyspark df 的值是不是存在于其他列 pyspark df