首页 > 解决方案 > 使用 Python 进行多子字符串过滤的建议

问题描述

My Dataframe:

在此处输入图像描述

或者:

   Symbol List   mic reuters_exchange_code
12     1COV.DE  XETR                   .DE
13      2GB.DE  XETR                   .DE
14     2HRA.DE  XETR                   .DE
32       3IN.L  XLON                    .L
64       888.L  XLON                    .L
66      93M.DE  XETR                   .DE
70     A1OS.DE  XETR                   .DE
71      A2A.MI  MTAA                   .MI
72      A3M.MC  XMAD                   .MC
73      A4Y.DE  XETR                   .DE
74       A5G.I  XDUB                    .I
76      AAB.CO  XCSE                   .CO
77      AAD.DE  XETR                   .DE
78      AAG.DE  XETR                   .DE
80      AAK.ST  XSTO                   .ST
81     AALB.AS  XAMS                   .AS
82       AAL.L  XLON                    .L
83       AAM.S  XSWX                    .S
84      AAQ.DE  XETR                   .DE
86       AAS.L  XLON                    .L
87        AA.L  XLON                    .L
88      ABBN.S  XVTX                    .S

有什么建议可以克服这个问题吗?

在第 1 列中,首先过滤掉“ XSWX ”和“ XVTX ”,分别得到“ SW ”和“ VX ”。

...然后在第 2 列中,仅将“ .S ”字符串替换为“ SW ”和“ VX

...获得显示“ AAM.SW ”和“ ABBN.VX ”的结果,而不是在索引列中显示其当前的“ AAM.S ”和“ AABN.S ”。

标签: python-3.xstringpandasmultiple-columns

解决方案


您想使用np.select,因为您有多个条件。所以我们可以修复我们的reuters_exchange_code专栏。之后,我们Symbol List通过连接bats_name填充reuters_exchange_code如下:

conditions = [
    (df['mic'] == 'XSWX'),
    (df['mic'] == 'XVTX')
]

choices = ['.SW','.VX']

df['reuters_exchange_code'] = np.select(conditions, 
                                        choices, 
                                        default=df['reuters_exchange_code'])

df['Symbol List'] = df['bats_name'] + df['reuters_exchange_code']

print(df)
   Symbol List bats_name                                  company_name   mic  \
0      1COV.DE      1COV                                   Covestro AG  XETR   
1       2GB.DE       2GB                                   G Energy AG  XETR   
2      2HRA.DE      2HRA                            H&R GmbH & Co KGaA  XETR   
3        3IN.L       3IN                         3i Infrastructure PLC  XLON   
4        888.L       888                              888 Holdings PLC  XLON   
5       93M.DE       93M                            MPH Health Care AG  XETR   
6      A1OS.DE      A1OS                          All for One Steeb AG  XETR   
7       A2A.MI       A2A                                       A2A SpA  MTAA   
8       A3M.MC       A3M  Atresmedia Corp de Medios de Comunicacion SA  XMAD   
9       A4Y.DE       A4Y                       Accentro Real Estate AG  XETR   
10       A5G.I       A5G                                 AIB Group PLC  XDUB   
11      AAB.CO       AAB                      Aalborg Boldspilklub A/S  XCSE   
12      AAD.DE       AAD                               Amadeus Fire AG  XETR   
13      AAG.DE       AAG                                     Aumann AG  XETR   
14      AAK.ST       AAK                                        AAK AB  XSTO   
15     AALB.AS      AALB                        Aalberts Industries NV  XAMS   
16       AAL.L       AAL                            Anglo American PLC  XLON   
17      AAM.SW       AAM                            Anglo American PLC  XSWX   
18      AAQ.DE       AAQ                             AAP Implantate AG  XETR   
19       AAS.L       AAS              Aberdeen Standard Asia Focus PLC  XLON   
20        AA.L        AA                                        AA PLC  XLON   
21     ABBN.VX      ABBN                                       ABB Ltd  XVTX   
22      ABB.MC       ABB                                 AB-Biotics SA  XMAD   
23      ABB.ST       ABB                                       ABB Ltd  XSTO   
24     ABCA.PA      ABCA                                 ABC arbitrage  XPAR   
25     ABEO.PA      ABEO                                       Abeo SA  XPAR   
26       ABF.L       ABF                  Associated British Foods PLC  XLON   
27     ABGP.MC      ABGP                                    Abengoa SA  XMAD   
28      ABG.MC       ABG                                    Abengoa SA  XMAD   
29     ABIO.PA      ABIO                                    Albioma SA  XPAR   

   reuters_exchange_code  
0                    .DE  
1                    .DE  
2                    .DE  
3                     .L  
4                     .L  
5                    .DE  
6                    .DE  
7                    .MI  
8                    .MC  
9                    .DE  
10                    .I  
11                   .CO  
12                   .DE  
13                   .DE  
14                   .ST  
15                   .AS  
16                    .L  
17                   .SW  
18                   .DE  
19                    .L  
20                    .L  
21                   .VX  
22                   .MC  
23                   .ST  
24                   .PA  
25                   .PA  
26                    .L  
27                   .MC  
28                   .MC  
29                   .PA  

让我们只过滤已更改的行以显示它有效:

print(df[(df['mic'] == 'XSWX') | (df['mic'] == 'XVTX')][['Symbol List', 'mic', 'reuters_exchange_code']])

   Symbol List   mic reuters_exchange_code
17      AAM.SW  XSWX                   .SW
21     ABBN.VX  XVTX                   .VX

推荐阅读