鉴于此多索引数据框,
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”并给索引赋予列名没有成功。
谢谢。
答案 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