检查一个DataFrame的行是否存在于另一个

时间:2019-05-15 04:50:11

标签: python pandas

我有两个数据框:

DF1

 A   B
'a' 'x' 
'b' 'y'
'c' 'z'

DF2

Col1 Col2
'j'  'm'
'a'  'x'
'k'  'n'
'b'  'y'

并且想要查找DF1中的行是否包含在DF2中,然后将该列Bool_col添加到DF1中,如下所示。

DF1

 A   B   Bool_col
'a' 'x'  True
'b' 'y'  True
'c' 'z'  False

我尝试在Col1和Col2的串联列表中查找A和B的串联,但是我的数据给我带来了意外的麻烦。在不连接列的情况下如何执行此操作有任何帮助吗?

2 个答案:

答案 0 :(得分:3)

mergeindicator参数一起使用,然后检查哪些行显示“两个”。

df1['Bool_col'] = (df1.merge(df2, 
                             how='left', 
                             left_on=['A', 'B'], 
                             right_on=['Col1', 'Col2'], 
                             indicator=True)
                      .eval('_merge == "both"'))

df1
     A    B  Bool_col
0  'a'  'x'      True
1  'b'  'y'      True
2  'c'  'z'     False

答案 1 :(得分:3)

使用pandas.mergenumpy.where

df = df1.merge(df2, how='left', indicator=True, left_on=['A','B'], right_on=['Col1','Col2'])
df['Bool_col'] = np.where(df['_merge']=='both', True, False)
df.drop(['_merge','Col1','Col2'], 1, inplace=True)
print(df)

输出:

   A  B     Bool_col
0  a  x      True
1  b  y      True
2  c  z     False

修改

根据注释中建议的@ cs95,此处np.where是不必要的。 您只需完成

df1['Bool_col'] = df['_merge']=='both'
# df.drop(['_merge','Col1','Col2'], 1, inplace=True)