熊猫匹配/比较多列

时间:2020-04-27 21:02:26

标签: python pandas comparison

我想按两列比较两个熊猫表。 考虑以下示例: 我想得到一个布尔序列,该序列仅在两个条件均匹配时才表示True。 我尝试过is.in()并没有成功。我既可以在“一个”上循环,也可以在两个数据帧中将两个列组合在一起(添加),但是是否有熊猫的一些内置功能可以进行涉及两对列的此类(嵌套)比较?

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]

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

在Pandas中进行列比较时,会得到一列/向量的布尔值。您可以使用Python的按位运算在这些结果之间进行按元素的布尔运算(因此,&代替and,而|代替or)。您只需要注意操作的顺序,因为按位比较的优先级高于比较。所以,

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