Сортировать «Дата» в мультииндексе - PullRequest
0 голосов
/ 06 марта 2019

Учитывая этот мультииндексный фрейм данных,

Units                               Import                                               Export
Date     01012019  01022019  02012019  02022019   03012019  03022019   01012019  01022019  02012019  02022019   03012019  03022019
Period
   0        4          3         1         1         2          4          2         2         1         1          2         2  
   1        2          2         3         2         4          2          1         2         3         8          4         9
   2        2          6         7         7         5          1          3         6         2         2          2         0
   3        4          2         2         2         3          4          1         8         2         9          4         2

Я пытаюсь выяснить, как отсортировать индекс «Дата» в порядке возрастания по месяцу (Дата указана в формате DDMMYYYY).Конечный результат будет содержать столбцы «Импорт» и «Экспорт» для одного дня (например, 01012019 будет иметь 4 и 2, и кадр данных будет отсортирован по возрастанию по месяцам).

Я понимаю, что по порядкучтобы отсортировать индекс даты, мне нужно использовать to_datetime для преобразования типа.Этот метод сортировки работает только в том случае, если я полностью отбрасываю свой индекс «Units», чего я не могу.

Есть ли способ?Я попытался поиграться с get_level_values ​​и присвоить моему столбцу имя столбца, но безуспешно.

Спасибо.

1 Ответ

0 голосов
/ 06 марта 2019

Выберите уровни по MultiIndex.get_level_values, преобразуйте в datetime s и присвойте обратно:

dates = pd.to_datetime(df.columns.get_level_values(1), format='%d%m%Y')
df.columns = [df.columns.get_level_values(0), dates]
print (df)
       Units                           Import                        \
  2019-01-01 2019-02-01 2019-01-02 2019-02-02 2019-01-03 2019-02-03   
4          3          1          1          2          4          2   
2          2          3          2          4          2          1   
2          6          7          7          5          1          3   
4          2          2          2          3          4          1   

                 Export                                   
  2019-01-01 2019-02-01 2019-01-02 2019-02-02 2019-01-03  
4          2          1          1          2          2  
2          2          3          8          4          9  
2          6          2          2          2          0  
4          8          2          9          4          2

Затем выполните сортировку, как вам нужно, по DataFrame.sort_index- например, по второму уровню:

df = df.sort_index(axis=1, level=1)
print (df)
      Import      Units     Export      Units     Export     Import  \
  2019-01-01 2019-01-01 2019-01-02 2019-01-02 2019-01-03 2019-01-03   
4          2          3          1          1          2          4   
2          2          2          8          2          9          2   
2          6          6          2          7          0          1   
4          8          2          9          2          2          4   

      Export      Units     Export     Import             
  2019-02-01 2019-02-01 2019-02-02 2019-02-02 2019-02-03  
4          1          1          2          2          2  
2          3          3          4          4          1  
2          2          7          2          5          3  
4          2          2          4          3          1  
...