【问题标题】:Suggestions For Multiple Sub-String Filter With Python使用 Python 进行多子字符串过滤的建议
【发布时间】:2019-08-06 13:23:15
【问题描述】:
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' 在索引列中。

【问题讨论】:

  • 我看到您在jupyter notebook 中有您的数据框,但我们无法复制屏幕截图。请print() 将数据框粘贴到此处,以便我们自己运行代码。
  • 很高兴,但我该怎么做呢?抱歉,我以前从未被问过这个问题。
  • print(dataframe.reset_index())。我使用 reset_index() 是因为我看到 symbol list 在这种情况下是您的索引,这对我们来说很难复制。
  • 完成 print(dataframe.reset_index()) ...然后我是否保存到 html 并在此处附加该文件?
  • 只需复制 jupyter notebook 的输出并将其粘贴到您的帖子中。就这么简单。

标签: python-3.x string pandas multiple-columns


【解决方案1】:

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

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

【讨论】:

  • 哇,就是这样...谢谢它的工作!真是个天才=D
  • 快乐,快乐的编码! @山羊
【解决方案2】:

如果我明白你想要什么:

#modify the code .S to SW for XSWX
df.loc[df['reuters_exchange_code'].eq('.S') & df['mic'].eq('XSWX'), 'reuters_exchange_code'] = 'SW'
#modify the code .S to VX for XVTX
df.loc[df['reuters_exchange_code'].eq('.S') & df['mic'].eq('XVTX'), 'reuters_exchange_code'] = 'VX'
:
:
#rebuild the symbol list
df['Symbol List'] = df['bats_name'] + df['reuters_exchange_code']
df = df.set_index('Symbol List')

【讨论】:

  • 是的,这就是想法,但是当我运行你的代码时,我得到一个无效的语法,显示 df['mic']
  • 我已经重新运行了你的代码,但是输出和以前一样......不过这是正确的想法
猜你喜欢
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多