从公司名称获取股票代码(非标准)Pandas

Get Stock Ticker from Company Name (Non Standard) Pandas

给定一个公司名称(非标准后缀和形式),我想在我的 df 中创建一个新列,其中包含其股票代码。我可以根据另一个查找/键 table 提取代码,但每个公司名称的形式在 table 之间不是 100% 一致。
我有两个数据集:
1. 姓名列表 ( df )
2. 代码到名称的映射 ( dfKey )

两家公司的名称并不总是相同的,所以我做不到df['Ticker']=np.where(df['companyName']==dfKey['companyName'],dfKey['Ticker'].NaN)

即使是我能得到 70-90% 正确率的解决方案也足够好(我的真实数据集是数千家公司,只有一些数据比 none 好;有些像 Salesforce 一样无法解码来自客户关系管理)。

我的样本 dfs:

import numpy as np
import pandas as pd

raw_data = {       
    'companyName1': ['General Electric','NVIDA Corporation', 'Blizzard', 'CRM', 'Google', 'Tesla']} 
df = pd.DataFrame(raw_data , columns = ['companyName1'])
#dfKey.set_index('Code', inplace=True) #Set Code as Row Index
print(df)

raw_dataKey = {'Ticker': ['GE','NVID', 'ATVI', 'CRM', 'GOOGL', 'TSLA'],       
    'companyName2': ['General Electric Company','NVIDA Corp', 'Activision', 'SalesForce', 'Google', 'Tesla Inc']} 
dfKey = pd.DataFrame(raw_dataKey , columns = ['Ticker', 'companyName2'])
#dfKey.set_index('Code', inplace=True) #Set Code as Row Index
print(dfKey)

期望的输出:

          companyName1 Ticker
0     General Electric     GE
1    NVIDA Corporation   NVID
2  Activision Blizzard   ATVI
3                  CRM    NaN
4               Google   GOOG
5                Tesla   TSLA

我已经尝试过某种形式的拆分每个词然后比较第一个词(这应该是一个足够好的解决方案)但我一直对如何处理数据帧中的列表感到困惑。

df['companyNameSplit'] = df['companyName'].str.split(' ')

我也试过修改 URL 电话,坚持输入公司名称,但无济于事,只是想看看我得到了什么 ( a la Getting stock symbol from company name )

import urllib
url='http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=Thomas%20Scott&callback=YAHOO.Finance.SymbolSuggest.ssCallback'
data = urllib.request.urlopen(url).read()

我还缺少其他想法吗?

以下是匹配公司名称第一个单词的方法:

In [36]: df['first_word'] = df.companyName1.str.split(' ').str[0]

In [37]: dfKey['first_word'] = dfKey.companyName2.str.split(' ').str[0]

In [38]: pd.merge(df, dfKey, on='first_word', how='outer')
Out[38]: 
        companyName1  first_word Ticker              companyName2
0   General Electric     General     GE  General Electric Company
1  NVIDA Corporation       NVIDA   NVID                NVIDA Corp
2           Blizzard    Blizzard    NaN                       NaN
3                CRM         CRM    NaN                       NaN
4             Google      Google  GOOGL                    Google
5              Tesla       Tesla   TSLA                 Tesla Inc
6                NaN  Activision   ATVI                Activision
7                NaN  SalesForce    CRM                SalesForce

假设我必须映射以下两家公司

1.Instructions 商用机器 2.National 纽约市银行

因为从结果中我们可以看到第一个单词 International 与大多数行情匹配并且它出现了。

结果:只考虑前几行

Ticker  companyName1

0 NaN IBM

1 IBM 国际商业机器公司

2 家 IFF 国际商用机器公司

3台IGT国际商用机器

4 所 INSW 国际商业机器

5台IP国际商务机

6 NaN Google

7 纽约市 NBHC 国家银行

8 纽约市 NFG 国家银行

9 纽约市 NGG 国家银行

10 纽约市 NHI 国家银行