我想按两列比较两个熊猫表。 考虑以下示例: 我想得到一个布尔序列,该序列仅在两个条件均匹配时才表示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]
编辑:第二个表更像是一个查找表。它们的形状不同。应该已经更清楚了。
答案 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)