pandas match/compare 多列

pandas match/compare multiple columns

我想按两列比较两个 pandas-table。 考虑以下示例: 我想得到一个布尔系列,它仅在两个条件都匹配时才指示 True。 我试过 is.in() 但没有成功。我可以遍历 "One" 或在两个数据框中将两列组合(添加)在一起,但是 pandas 是否有一些内置功能允许涉及两对列的此类(嵌套)比较?

tab1 = pd.DataFrame({"One": [1, 1, 2, 3],
                     "Two": ["A", "B", "C", "C"]})

tab2 = pd.DataFrame({"One": [1, 2, 2, 3, 3],
                     "Two": ["A", "A", "B",  "A","C"]})

# Desired Result (New column in tab1): [True, False, False, True]

编辑:第二个 table 更像是一个查找 table。它们的形状不同。应该更清楚一点。

tab1.eq(tab2).all(1)
0     True
1    False
2    False
3     True
dtype: bool

更新

tab1.merge(tab2,indicator=True,how='left')['_merge'].eq('both')
0     True
1    False
2    False
3     True
Name: _merge, dtype: bool

当你在 Pandas 中进行柱状比较时,你会得到一个 column/vector 的布尔值。您可以使用 Python 的按位运算在这些结果之间执行按元素的布尔运算(因此,& 而不是 and| 而不是 or).您只需要注意操作顺序,因为按位比较的优先级高于比较。所以,

(tab1.One == tab2.One) & (tab1.Two == tab2.Two)