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)
我想按两列比较两个 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)