Преобразовать заголовок столбца в индекс - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть pandas .Data.Frame следующего типа:

       Unnamed           AAPL           IMBX ...
          Date  Price  Volume  Price  Volume ...
0   1973-01-01   21.1    1882   55.6    2009 ...  
1   1973-01-02   21.3    1787   54.5    2001 ...
2   1973-01-03   22.5    1701   52.0    2186 ...
3   1973-01-04   21.1    1799   53.3    1999 ...

Я хотел бы изменить структуру данных таким образом, чтобы я мог использовать Date и название акции (например, имея столбец «Фондовая» с соответствующими данными) в качестве индекса для моих данных, т.е. преобразуя их в длинный формат. Как я могу это сделать?

1 Ответ

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

Эта строка кода должна работать для вас

df = df.set_index(("Unnamed", "Date")).unstack().unstack(level=1)

Для вашего фрейма данных

data = [["1973-01-01", 21.1, 1882, 55.6, 2009 ],
        ["1973-01-02", 21.3, 1787, 54.5, 2001 ],
        ["1973-01-03", 22.5, 1701, 52.0, 2186 ],
        ["1973-01-04", 21.1, 1799, 53.3, 1999 ]]

columns = [ ("Unnamed", "Date"), ("AAPL", "Price"), 
            ("AAPL", "Volume"), ("IMBX", "Price"), ("IMBX", "Volume")]

df = pd.DataFrame(data, columns = pd.MultiIndex.from_tuples(columns))

это дает

                    Price   Volume
     (Unnamed, Date)         
AAPL    1973-01-01  21.1    1882.0
        1973-01-02  21.3    1787.0
        1973-01-03  22.5    1701.0
        1973-01-04  21.1    1799.0
IMBX    1973-01-01  55.6    2009.0
        1973-01-02  54.5    2001.0
        1973-01-03  52.0    2186.0
        1973-01-04  53.3    1999.0

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

df = df.swaplevel().sort_index()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...