首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建新列,如果两列中的名称使用正则表达式匹配,则返回true/false

创建新列,如果两列中的名称使用正则表达式匹配,则返回true/false
EN

Stack Overflow用户
提问于 2019-04-09 12:35:54
回答 2查看 317关注 0票数 1

我有一个dataframe,其中我试图匹配两个列的列字符串值,以创建一个新列,如果两个列值匹配,则返回true;如果不匹配,则返回false。

pattern = re.compile('^a-zA-Z')

代码语言:javascript
运行
复制
    Name A         Name B
0   yGZ,)          ygz.
1   (CGI)          C.G.I
2   Exto           exto.
3   Golden         UTF

我想试试这样的东西:

代码语言:javascript
运行
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-09 12:39:01

您可以使用str.replace删除标点符号(也可以参见我的另一篇文章Fast punctuation removal with pandas),然后

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2019-04-09 12:43:20

可以使用pd.DataFrame.replace清理字符串,然后使用eq进行比较。当然,如果您希望维护原始df的副本,只需将返回的数据框赋给一个新变量;}

代码语言:javascript
运行
复制
df = df.replace("[^a-zA-Z0-9]", '', regex=True)

然后

代码语言:javascript
运行
复制
df['Result'] = df['Name A'].str.lower().eq(df['Name B'].str.lower())

输出

代码语言:javascript
运行
复制
    Name A  Name B  Result
0   yGZ     ygz     True
1   CGI     CGI     True
2   Exto    exto    True
3   Golden  UTF     False
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55585189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档