问题
I have two dataframes,
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
I tried,
mask=new1.Name.str.contains("|".join(new3.req.values.tolist()))
new1[mask]
I am getting,
new1[mask]
Name city
1 pechi won pune
0 pec won kerala
As "pechi" contains "pec", it took this valu. but I want the exact match between the values not "contains"
my desired output is,
new1[mask]
Name city
0 pec won kerala
回答1:
You need \b
that means "word boundary":
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
回答2:
You need space in separator
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
来源:https://stackoverflow.com/questions/45583113/comparing-two-dataframe-columns-to-check-if-they-have-same-value-in-python