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