У меня есть три DataFrames. Один для ежедневных валютных цен d_fx
, один для ежедневных значений NAV d
и один для справочных данных m
. Примеры ниже:
EUR GBP USD
date
2012-01-01 1.2961 1.5543 1.0
2012-01-02 1.2934 1.5514 1.0
2012-01-03 1.3050 1.5649 1.0
2012-01-04 1.2943 1.5620 1.0
date Assets
BUTBERI BH Equity 2012-01-01 14.32000
2012-01-02 14.32000
2012-01-03 14.32000
2012-01-04 14.34000
2012-01-05 14.34000
JGGFLEU LX Equity 2012-01-01 19.88656
2012-01-02 20.01639
2012-01-03 19.99365
2012-01-04 20.31770
2012-01-05 20.35174
ICEPROB FH Equity 2012-01-01 NaN
2012-01-02 NaN
2012-01-03 NaN
2012-01-04 NaN
2012-01-05 NaN
FUND_TOTAL_ASSETS_CRNCY
BUTBERI BH Equity USD
ICEPROB FH Equity EUR
JGGFLEU LX Equity EUR
Я пытаюсь установить столбцы в DataFrame d
используя.loc, но не успешно. Используя следующее:
idx = pd.IndexSlice
d.loc[idx[:,:], 'FX_price'] =
d_fx.loc[d.index.get_level_values(1),
m.loc[d.index.get_level_values(0)].values]
Скрипт завершается без ошибок, но все значения в FX_price
составляют NaN
. Есть лучший способ сделать это? Я делаю что-то явно неправильно?
Спасибо заранее. ' ИЗМЕНЕННЫЕ ФУНКЦИИ
Используйте rename
по столбцу FUND_TOTAL_ASSETS_CRNCY
с помощью DataFrame.lookup
:
d = d.rename(index=m['FUND_TOTAL_ASSETS_CRNCY'], level=0)
print (d)
Assets
date
USD 2012-01-01 14.32
2012-01-02 14.32
2012-01-03 14.32
2012-01-04 14.34
d['FX_price'] = d_fx.lookup(d.index.get_level_values(1), d.index.get_level_values(0))
print (d)
Assets FX_price
date
USD 2012-01-01 14.32 1.0
2012-01-02 14.32 1.0
2012-01-03 14.32 1.0
2012-01-04 14.34 1.0
d.index.get_level_values
говорит о том, что вы используете мультииндекс, который скрыт от всех, кроме вас. Можете ли вы предоставить код для генерации образцов данных?