python - 反加入 Pandas

标签 python pandas dataframe merge anti-join

我有两个表,我想附加它们,以便仅保留表 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_onlyleft_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) 但它只适用于匹配一列。如果您想匹配多列 - 我的解决方案与一列一样好。

所以由你来决定。

enter image description here

关于python - 反加入 Pandas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38516664/

相关文章:

python - mac os x Mavericks : Fatal Python error: PyThreadState_Get: no current thread 上的 Macports + Python

python - Pandas,跳过 xlsx 中的空列

python - 如何在不创建临时列的情况下从 pandas 数据框列计算最小值?

python - 重置 csv.DictReader(StringIO.StringIO(some_string))

python - 如何在Python中并行化嵌套for循环?

python - VideoCapture Opencv 中的 icvOpenAVI_XINE() 错误

pandas - 如何从 pandas 数据框中随机删除 10% 的属性值

python - pandas - 将列转换为分钟值

python - 将 for 循环中的绘图标题设为数据框的列名称

python - 如何合并两个具有不同索引的数据帧?