我有两个表,我想附加它们,以便仅保留表 A 中的所有数据,并且仅在其键是唯一的情况下才添加表 B 中的数据(键值在表 A 和 B 中是唯一的,但是在在某些情况下,表 A 和 B 中都会出现 Key)。
我认为执行此操作的方法将涉及某种过滤联接(反联接)以获取表 B 中未出现在表 A 中的值,然后附加两个表。
我熟悉 R,这是我在 R 中用来执行此操作的代码。
library("dplyr")
## Filtering join to remove values already in "TableA" from "TableB"
FilteredTableB <- anti_join(TableB,TableA, by = "Key")
## Append "FilteredTableB" to "TableA"
CombinedTable <- bind_rows(TableA,FilteredTableB)
如何在 python 中实现这一点?
最佳答案
merge
命令中的
indicator = True
将通过创建具有三个可能值的新列 _merge
来告诉您应用了哪个联接:
left_only
right_only
两者
保留 right_only
和 left_only
。就是这样。
outer_join = TableA.merge(TableB, how = 'outer', indicator = True)
anti_join = outer_join[~(outer_join._merge == 'both')].drop('_merge', axis = 1)
简单!
这是与 piRSquared 解决方案的比较:
1) 在这个基于一列匹配的示例上运行时,piRSquared 的解决方案更快。
2) 但它只适用于匹配一列。如果您想匹配多列 - 我的解决方案与一列一样好。
所以由你来决定。
关于python - 反加入 Pandas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38516664/