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

Python 从公司名称(非标准)获取股票代码,python,pandas,dataframe,mapping,quantitative-finance,Python,Pandas,Dataframe,Mapping,Quantitative Finance,给定一个公司名称(非标准后缀和表格),我想在我的df中创建一个带有股票代码的新列。我可以根据另一个查找/键表来提取股票代码,但表之间每个公司名称的形式并非100%一致。 我有两个数据集: 1.姓名列表(df) 2.股票代码到名称的映射(dfKey) 两家公司的名称并不总是相同的,所以我不能做df['Ticker']=np.where(df['companyName']==dfKey['companyName',dfKey['Ticker'].NaN) 即使是一个解决方案,我可以得到70-90%的

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

2.股票代码到名称的映射(
dfKey

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

即使是一个解决方案,我可以得到70-90%的正确率,也已经足够好了(我真正的数据集是数千家公司,只有一些数据比没有好;有些数据无法像CRM中的Salesforce那样解码)

我的样本
df
s:

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调用,只是为了看我得到了什么,而在公司名称中粘贴,但没有效果 (阿拉)


我还缺少其他想法吗?

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

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.商用机器说明 2.纽约市国家银行

因为从结果中,我们可以看到第一个单词国际匹配大多数股票,它显示出来

结果:只考虑前几行

Ticker  companyName1
0 NaN IBM

1 IBM国际商用机器

2国际商业机器

3 IGT国际商用机器

4 INSW国际商用机器

5 IP国际商务机器

6南谷歌

7纽约市NBHC国家银行

8纽约市NFG国家银行

9纽约市NGG国家银行


10纽约市NHI国家银行

谢谢!!我想知道是否有一种方法可以搜索并查看列Name1中的字符串的任何部分在整个数据帧中是否在列Name2中……我们将进一步调查。
Ticker  companyName1