我有一个数据框,我试图匹配两个列的列字符串值以创建一个新列,如果两个列值匹配,则返回true,否则返回false。 想要使用match和regex,删除所有非字母数字字符并使用小写字母来匹配名称
pattern = re.compile('[^ a-zA-Z]')
Name A Name B
0 yGZ,) ygz.
1 (CGI) C.G.I
2 Exto exto.
3 Golden UTF
我正在考虑尝试这样的事情:
dataframe['Name A', 'Name B'].str.match(pattern, flags= re.IGNORECASE)
Name A Name B Result
0 yGZ,) ygz. True
1 (CGI) C.G.I True
2 Exto exto. True
3 Golden UTF False
答案 0 :(得分:3)
可以使用pd.DataFrame.replace
来清理您的字符串,然后使用eq
进行比较。当然,如果您希望维护原始df
的副本,只需将返回的数据框分配给新变量;}
df = df.replace("[^a-zA-Z0-9]", '', regex=True)
然后
df['Result'] = df['Name A'].str.lower().eq(df['Name B'].str.lower())
输出
Name A Name B Result
0 yGZ ygz True
1 CGI CGI True
2 Exto exto True
3 Golden UTF False
答案 1 :(得分:1)
您可以使用str.replace
删除标点符号(另请参阅我的另一篇文章Fast punctuation removal with pandas),然后
u = df.apply(lambda x: x.str.replace(r'[^\w]', '').str.lower())
df['Result'] = u['Name A'] == u['Name B']
df
Name A Name B Result
0 yGZ,) ygz. True
1 (CGI) C.G.I True
2 Exto exto. True
3 Golden UTF False