2016-09-08 9 views
1

У меня есть список компании тикер'S:Создать DataFrame из петли с функцией Bloomberg

df = {'Ticker': ['AVON LN EQUITY', 'GFS LN EQUITY'], 'Value': [1., 2.]} 
df = pd.DataFrame(df) 

Я использую BLPAPI обертку, https://github.com/alex314159/blpapiwrapper

С помощью этого я хотел бы получить DataFrame, из всех цены на ежемесячной основе. Для этого я использую класс BLP и функцию BDH. Настройки ниже (чем дольше версия находится в ссылке):

def bdh(self, strSecurity='SPX Index', strData='PX_LAST', startdate=datetime.date(2013, 1, 1), enddate=datetime.date(2016, 9, 6), 
     adjustmentSplit=False, periodicity='MONTHLY', strOverrideField='', strOverrideValue=''): 

для простоты я создала мини-функцию:

def bloom_func(x, func): 
    bloomberg = BLP() 
    return bloomberg.bdh(x, func, strOverrideField='BEST_FPERIOD_OVERRIDE', strOverrideValue='1GY') 
    bloomberg.closeSession() 

Используя этот я могу получить DataFrame для одного капитала.

Price = bloom_func('VOD LN EQUITY', 'PX_LAST') 
print (c) 

который работает.

Однако, когда я пытаюсь запустить это в через 2 компаний, использующих:

df1 = pd.concat([df.apply(lambda x: bloom_func(x)) for p in df['Ticker']]) 

я получаю ValueError: Форма переданных значений (2, 0), индексы следует (2, 2).

+0

IIUC вам нужно 'df1 = pd.concat ([DF применить [ 'Код']. (Bloom_func)])' – jezrael

ответ

1

было проще, чем я думал

for d in df['Ticker']: 
    x[d] = bloom_func(d)