首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据另一列中字符串值的多个条件添加后缀

根据另一列中字符串值的多个条件添加后缀
EN

Stack Overflow用户
提问于 2022-02-16 10:50:56
回答 1查看 343关注 0票数 1

当一个条件在另一列中满足时,我想在一列中为字符串添加一个后缀。如果在" market“列中存在值,则更新”符号“列对应的值以包括当前的代码,但我想在其上添加一个后缀,表示其市场位置。我想我可以为每个值创建多个掩码,并用多行代码来更改多个值,但是我想知道在一个操作中是否有一种更优雅的方法来做到这一点。

这就是我试过的:

conditions = [ (df['Market'].str.contains("Oslo")), (df['Market'].str.contains("Paris")), (df['Market'].str.contains("Amsterdam")), (df['Market'].str.contains("Brussels")), (df['Market'].str.contains("Dublin")) ] values = [str+'.OL', str+'.PA', str+'.AS', str+'.BR', str+'.IR'] df['Symbol'] = np.select(conditions, values) print(df)

我收到一个错误:

不支持的操作数类型(S)用于+:'type‘和'str’

欢迎任何帮助

在金奥托的回答之后..。

数据框架:

代码语言:javascript
复制
|  Name             | Symbol   | Market                 |
|:------------------|:---------|:-----------------------|
|  1000MERCIS       | ALMIL    | Euronext Growth Paris  |
|  2020 BULKERS     | 2020     | Oslo Børs              |
|  2CRSI            | 2CRSI    | Euronext Paris         |
|  2MX ORGANIC      | 2MX      | Euronext Paris         |
|  2MX ORGANIC BS   | 2MXBS    | Euronext Paris         |
|  5TH PLANET GAMES | 5PG      | Euronext Expand Oslo   |
|  A TOUTE VITESSE  | MLATV    | Euronext Access Paris  |
|  A.S.T. GROUPE    | ASP      | Euronext Paris         |
|  AALBERTS NV      | AALB     | Euronext Amsterdam     |
|  AASEN SPAREBANK  | AASB     | Euronext Growth Oslo   |
|  AB INBEV         | ABI      | Euronext Brussels      |
|  AB SCIENCE       | AB       | Euronext Paris         |
|  ABATTOIR         | -        | Euronext Expert Market |
|  ABC ARBITRAGE    | ABCA     | Euronext Paris         |
|  ABEO             | ABEO     | Euronext Paris         |

创建带有后缀列的新df的代码,然后将这些值与符号列合并,以获得雅虎金融正确理解的要查询的代码。

代码语言:javascript
复制
suffix_list = pd.DataFrame({'Market': ['Euronext Growth Oslo','Euronext Expand Oslo', 'Oslo Børs', 'Euronext Brussels','Euronext Growth Brussels','Euronext Paris', 'Euronext Access Paris','Euronext Growth Paris', 'Euronext Lisbon', 'Euronext Access Lisbon', 'Euronext Dublin', 'Euronext Growth Dublin', 'Euronext Brussels', 'Euronext Access Brussels','Euronext Amsterdam'], 'suffix':['.OL','.OL','.OL','.BR','.BR','.PA','.PA','.PA','.LI','.LI','.IR','.IR','.BR','.BR','.AS']})
new_df = pd.merge(df, suffix_list, how='left', on='Market')
new_df['Ticker']=new_df['Symbol']+new_df['suffix']

包含Ticker列的新dataframe:

代码语言:javascript
复制
|  Name             | Symbol   | Market                 | suffix   | Ticker   |
| :-----------------|:---------|:-----------------------|:---------|:---------|
|  1000MERCIS       | ALMIL    | Euronext Growth Paris  | .PA      | ALMIL.PA |
|  2020 BULKERS     | 2020     | Oslo Børs              | .OL      | 2020.OL  |
|  2CRSI            | 2CRSI    | Euronext Paris         | .PA      | 2CRSI.PA |
|  2MX ORGANIC      | 2MX      | Euronext Paris         | .PA      | 2MX.PA   |
|  2MX ORGANIC BS   | 2MXBS    | Euronext Paris         | .PA      | 2MXBS.PA |
|  5TH PLANET GAMES | 5PG      | Euronext Expand Oslo   | .OL      | 5PG.OL   |
|  A TOUTE VITESSE  | MLATV    | Euronext Access Paris  | .PA      | MLATV.PA |
|  A.S.T. GROUPE    | ASP      | Euronext Paris         | .PA      | ASP.PA   |
|  AALBERTS NV      | AALB     | Euronext Amsterdam     | .AS      | AALB.AS  |
|  AASEN SPAREBANK  | AASB     | Euronext Growth Oslo   | .OL      | AASB.OL  |
|  AB INBEV         | ABI      | Euronext Brussels      | .BR      | ABI.BR   |
|  AB INBEV         | ABI      | Euronext Brussels      | .BR      | ABI.BR   |
|  AB SCIENCE       | AB       | Euronext Paris         | .PA      | AB.PA    |
|  ABATTOIR         | -        | Euronext Expert Market | nan      | nan      |
|  ABC ARBITRAGE    | ABCA     | Euronext Paris         | .PA      | ABCA.PA  |
|  ABEO             | ABEO     | Euronext Paris         | .PA      | ABEO.PA  |
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-16 11:05:19

您需要分三个步骤进行

  1. 您需要定义一个详尽的suffix_list --一个只为每个市场保存一次信息的字典。

suffix_list = pd.DataFrame({'Market': ['Oslo', 'Paris'], 'suffix':['OL','PA']})

  1. 您希望将suffix_list合并到现有的dataframe中,作为一个新列--对于所有市场都有一个命令(对于列表中有后缀的每个市场,添加该后缀):

pd.merge(df, suffix_list, how='left', on='Market')

  1. 现在所有行的2列'value''suffix'相邻,您可以对所有行应用1个单一操作。

str('value')+'suffix'

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71140439

复制
相关文章

相似问题

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