首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过识别模式来替换具有不同名称的列的条目?

如何通过识别模式来替换具有不同名称的列的条目?
EN

Stack Overflow用户
提问于 2019-07-20 22:41:37
回答 4查看 56关注 0票数 4

我有一个列,假设其中有'MANU @ POR''MANU vs. UTA''MANU @ IND''MANU vs. GRE'等条目。所以我的列有3个条目,第一个名称是MANU,即第一个国家/地区代码,第二个是@/vs.,第三个是第二个国家/地区名称。所以我想做的是,如果'@'出现在我的列的任何条目中,我希望将其更改为'away',如果'vs.'出现,则应将整个条目替换为'home',如'MANU @ POR‘应更改为'away',而'MANU vs. GRE’应更改为'home'

虽然我用for,if,else写了一些代码来做这件事,但是它花了太长的时间来计算它,我的总行是30697,所以有没有其他方法来减少下面的时间,我正在向你展示我的代码,请帮助

代码语言:javascript
运行
复制
for i in range(len(df)):
    if is_na(df['home/away'][i]) == True:
        temp = (df['home/away'][i]).split()
        if temp[1] == '@':
            df['home/away'][i] = 'away'
        else:
            df['home/away'][i] = 'home
EN

回答 4

Stack Overflow用户

发布于 2019-07-20 22:55:23

您可以使用np.select来分配多个条件:

代码语言:javascript
运行
复制
s=df['Match Place'].str.split().str[1] #select the middle element
c1,c2=s.eq('@'),s.eq('vs.') #assign conditions
np.select([c1,c2],['away','home']) #assign this to the desired column
#array(['away', 'home', 'away', 'home'], dtype='<U11')
票数 3
EN

Stack Overflow用户

发布于 2019-07-20 22:48:17

您可以使用 [pandas-doc]检查字符串是否包含@,然后使用 [pandas-doc]填充相应的值。例如:

代码语言:javascript
运行
复制
>>> df
          match
0    MANU @ POR
1  MANU vs. UTA
2    MANU @ IND
3  MANU vs. GRE
>>> df['match'].str.contains('@').map({False: 'home', True: 'away'})
0    away
1    home
2    away
3    home
Name: match, dtype: object
票数 2
EN

Stack Overflow用户

发布于 2019-07-20 22:55:14

使用np.where to with contains检查任何子字符串是否存在

代码语言:javascript
运行
复制
import numpy as np
df = pd.DataFrame(data={"col1":["manu vs. abc","manu @ pro"]})
df['type'] = np.where(df['col1'].str.contains("@"),"away","home")
代码语言:javascript
运行
复制
        col1       type
0   manu vs. abc    home
1   manu @ pro      away
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57125740

复制
相关文章

相似问题

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