Преобразование MultiIndex Pandas DataFrame в Pivot - PullRequest
0 голосов
/ 12 февраля 2020

Похоже, это должно быть легко, но я не могу заставить его работать на всю жизнь.

У меня есть данные для данных о запасах, как показано ниже. Как я могу преобразовать приведенный ниже фрейм данных в сводную таблицу с датой в виде строк, биржевых символов в качестве столбцов и Adj Close в качестве значений (рисунок внизу)

Я получаю фрейм данных с этим кодом: pricing = web.DataReader(['MSFT', 'AAPL'], 'yahoo', datetime.datetime(2020, 1, 1), datetime.datetime(2020, 2, 10))

Фрейм данных DataFrame Сводная таблица

Pivot Table

РЕДАКТИРОВАТЬ:

Если я просто сделаю pricing = web.DataReader(['MSFT', 'AAPL'], 'yahoo', datetime.datetime(2020, 1, 1), datetime.datetime(2020, 2, 10))['Adj Close'], то у меня возникнут проблемы с использованием .loc [] для получения данных с использованием индекса другой сводной таблицы.

У меня есть вторая сводная таблица (показанная ниже), и когда я пытаюсь делать делать ценообразование. [pivot2.index] Я получаю ошибку.

Pivot 2

Ошибка:

KeyError: " Ни один из [DatetimeIndex (['1999-01-01', '2000-01-01', '2003-01-01', '2004-01-01', \ n '2005-01-01', '2006 -01-01 ',' 2007-01-01 ',' 2008-01-01 ', \ n' 2009-01-01 ',' 2010-01-01 ',' 2011-01-01 ',' 2012 -01-01 ', \ n' 2013-01-01 ',' 2014-01-01 ',' 2015-01-01 ',' 2016-01-01 ', \ n' 2017-01-01 ', '2018-01-01', '2019-01-01'], \ n dtype = 'datetime64 [ns]', name = 'date', freq = None)] находятся в t он [index] "

1 Ответ

0 голосов
/ 12 февраля 2020

Попробуйте использовать:

pricing['Adj Close']

где,

pricing = pd.DataFrame(np.random.randint(50,75,(10,6)), 
                  index=pd.date_range('01/2/20', periods=10, freq='D'),
                 columns=pd.MultiIndex.from_product([['Adj Close', 'Close', 'High'],['MSFT', 'AAPL']]))

           Adj Close      Close      High     
                MSFT AAPL  MSFT AAPL MSFT AAPL
2020-01-02        67   71    58   60   50   53
2020-01-03        54   59    64   72   62   50
2020-01-04        51   53    56   70   63   51
2020-01-05        64   71    74   62   68   62
2020-01-06        74   68    69   71   60   62
2020-01-07        55   55    51   70   74   72
2020-01-08        60   58    74   70   73   69
2020-01-09        51   58    72   54   50   61
2020-01-10        64   56    74   52   59   57
2020-01-11        55   50    68   61   60   59

Используя Basi c индексирование по оси с MultiIndex мы можем просто выбрать «Adj Close» на уровне 0.

pricing['Adj Close']

Выход:

            MSFT  AAPL
2020-01-02    66    51
2020-01-03    67    67
2020-01-04    74    74
2020-01-05    73    66
2020-01-06    68    52
2020-01-07    67    50
2020-01-08    73    54
2020-01-09    66    52
2020-01-10    62    73
2020-01-11    61    71
...