Исправление порядка сортировки индекса панд - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть датафрейм, который выглядит следующим образом. Мое поле Date имеет тип dtype datetime64[ns]:

           symbol        high         low
Date                                      
2018-08-16     spy  285.040009  283.359985
2018-08-17     spy  285.559998  283.369995
2018-08-16    nflx  331.170013  321.209991
2018-08-17    nflx  324.369995  312.959991
2017-07-17     spy  245.910004  245.330002
2017-07-18     spy  245.720001  244.669998

Моя цель - сначала установить индекс на symbol, а затем на Date, как показано ниже:

                          high         low
symbol Date 
spy     2017-07-17  245.910004  245.330002
        2017-07-18  245.720001  244.669998                             
        2018-08-16  285.040009  283.359985
        2018-08-17  285.559998  283.369995
nflx    2018-08-16  331.170013  321.209991
        2018-08-17  324.369995  312.959991

Вот моя попытка: После сброса индекса даты, результат выглядит следующим образом:

df.reset_index(level=['Date'], inplace=True)

        Date symbol        high         low
0 2018-08-16     spy  285.040009  283.359985
1 2018-08-17     spy  285.559998  283.369995
2 2018-08-16    nflx  331.170013  321.209991
3 2018-08-17    nflx  324.369995  312.959991
4 2017-07-17     spy  245.910004  245.330002
5 2017-07-18     spy  245.720001  244.669998

И, наконец, установка индекса для символа и даты, которая возвращает нежелательный вывод:

df.set_index(['symbol', 'Date'], inplace=True)

                          high         low
symbol Date                              
spy     2018-08-16  285.040009  283.359985
        2018-08-17  285.559998  283.369995
nflx    2018-08-16  331.170013  321.209991
        2018-08-17  324.369995  312.959991
spy     2017-07-17  245.910004  245.330002
        2017-07-18  245.720001  244.669998

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Не фанат inplace, но попробуйте pd.sort_index () :

df.reset_index(level=['Date'], inplace= True)
df.set_index(['symbol', 'Date'], inplace=True)
print(df.sort_index())

Выход:

                        high         low
symbol Date                              
nflx   2018-08-16  331.170013  321.209991
       2018-08-17  324.369995  312.959991
spy    2017-07-17  245.910004  245.330002
       2017-07-18  245.720001  244.669998
       2018-08-16  285.040009  283.359985
       2018-08-17  285.559998  283.369995
0 голосов
/ 11 сентября 2018

IIUC, Вы можете попробовать использовать swaplevel, а затем sort_index:

df.set_index('symbol', append=True).swaplevel().sort_index(level=[0,1],ascending=[False,True])

                         high         low
symbol Date                              
spy    2017-07-17  245.910004  245.330002
       2017-07-18  245.720001  244.669998
       2018-08-16  285.040009  283.359985
       2018-08-17  285.559998  283.369995
nflx   2018-08-16  331.170013  321.209991
       2018-08-17  324.369995  312.959991
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...