2017-08-09 63 views
-1

我有两个dataframes相同的值,比较两个数据框列,以检查他们是否有在python

new1. 
     Name  city 
0 sri won chn 
1 pechi won pune 
2 Ram won mum 
0 pec won kerala 

new3 
    req 
0 pec 
1 mut 

我试过,

mask=new1.Name.str.contains("|".join(new3.req.values.tolist())) 
new1[mask] 

我得到,

new1[mask] 
     Name  city 
1 pechi won pune 
0 pec won  kerala 

由于“pechi”包含“pec”,它花了这个价值。但我想值之间的精确匹配不是“包含”

我期望的输出,

new1[mask] 
     Name  city 
0 pec won  kerala 

回答

1

你需要\b,意思是“单词边界” :

a = r'\b(' + "|".join(new3.req.values.tolist()) + r')\b' 
print (a) 
\b(pec|mut)\b 

mask=new1.Name.str.contains(a) 
df = new1[mask] 
print (df) 
     Name city 
0 pec won kerala 
+0

哇,它工作完美,你能解释一下代码的第一行吗? – pyd

+0

你可以检查[this](https://stackoverflow.com/a/10138154/2901002)来解释'字边界'(我的英文很糟糕,特别是对于深层的解释) – jezrael

+0

ok Jezrael,病检。 – pyd

0

您在分离器需要空间

In [1350]: new1 
Out[1350]: 
     Name city 
0 sri won  chn 
1 pechi won pune 
2 Ram won  mum 
0 pec won kerala 

In [1351]: new3 
Out[1351]: 
    req 
0 pec 
1 mut 

In [1352]: ' | '.join(new3.req) 
Out[1352]: 'pec | mut' 

In [1353]: new1.Name.str.contains(' | '.join(new3.req)) 
Out[1353]: 
0 False 
1 False 
2 False 
0  True 
Name: Name, dtype: bool 

In [1354]: new1[new1.Name.str.contains(' | '.join(new3.req))] 
Out[1354]: 
     Name city 
0 pec won kerala 
+0

它给出了相同的结果:( – pyd

+0

你可以粘贴你的代码 – pyd

+0

可以请你告诉我你的代码与数据帧 – pyd

相关问题