Получение значения с использованием .loc и дат

1

У меня есть три 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. Есть лучший способ сделать это? Я делаю что-то явно неправильно?

Спасибо заранее. ' ИЗМЕНЕННЫЕ ФУНКЦИИ

  • 0
    Воспроизвести вашу проблему очень сложно, потому что вы не предоставили достаточно информации о своих фреймах данных. d.index.get_level_values говорит о том, что вы используете мультииндекс, который скрыт от всех, кроме вас. Можете ли вы предоставить код для генерации образцов данных?
Теги:
pandas
python-3.x

1 ответ

1
Лучший ответ

Используйте 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
  • 0
    Я мог бы упростить. Я внес поправки в рамки данных выше. Если я переименую индекс, не снизит ли он индекс до «EUR» и «USD»? У d.index есть 3 уровня, но у m ['FUND_TOTAL_ASSETS_CRNCY'] есть только два значения.
  • 1
    На самом деле, это работает для меня с некоторыми изменениями. df.lookup было то, что мне было нужно. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню