2017-07-14 81 views
0

給定一個公司名稱(非標準後綴和表格),我想創建一個新的列在我的df與股票行情。我可以根據另一個查找/關鍵表獲取股票,但每個公司名稱的表格在表格之間不是100%一致的。
我有兩個數據集:名稱(df
2.映射股票的人名(dfKey從公司名稱(非標準)獲取股票代碼熊貓

兩家公司的名稱並不總是相同的
1.列出,所以我不能做df['Ticker']=np.where(df['companyName']==dfKey['companyName'],dfKey['Ticker'].NaN)即使是一個解決方案,我可以獲得70-90%的正確率也足夠了(我的真實數據集是成千上萬的公司,只是一些數據比沒有數據好;有些解決方案不可能像Salesforce一樣從CRM解碼)。

我的樣本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調用只是爲了看看我得到 (點菜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() 

任何其他想法,我失蹤?

回答

1

這裏是你如何可以匹配對公司名稱的第一個字:

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 
+0

謝謝!我想知道是否有一種方法可以搜索並查看在Name1列中的任何部分字符串是否在整個熊貓數據框的Name2列中......將進一步調查。 – whs2k