在多索引中对“日期”进行排序

时间:2019-03-06 14:44:16

标签: python pandas multi-index

鉴于此多索引数据框,

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来转换类型。仅当我完全放弃我的“单位”索引时,这种排序方法才有效。

有办法吗?我尝试使用“ get_level_values”并给索引赋予列名没有成功。

谢谢。

1 个答案:

答案 0 :(得分:0)

通过MultiIndex.get_level_values选择级别,转换为datetime并分配:

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