pandas:使用unstack时更改multiindex的顺序

时间:2017-06-25 18:14:22

标签: python pandas

我有一个关于堆栈列排序的问题。我们来看看以下DataFrame:

import pandas as pd
df = pd.DataFrame([{'Branch':'A', 'Date':datetime.datetime(2017, 1, 1), 'profit':35},
          {'Branch':'B', 'Date':datetime.datetime(2017, 2, 1), 'profit':10},
          {'Branch':'A', 'Date':datetime.datetime(2017, 2, 1), 'profit':40},
          {'Branch':'B', 'Date':datetime.datetime(2017, 2, 1), 'profit':20},
          {'Branch':'A', 'Date':datetime.datetime(2017, 3, 1), 'profit':80},
          {'Branch':'B', 'Date':datetime.datetime(2017, 3, 1), 'profit':5}
          ])
df.set_index('Date', inplace=True)

现在,我想在使用这样的unstack之前做一些数学运算:

tmp = df.groupby([pd.TimeGrouper('M'),'Branch']).sum()
pd.DataFrame(tmp.unstack(level='Date'))

是否有任何方法可以使得结果DataFrame以第一列中的最新日期(2017-03-31)开头,并按降序对其余列(日期)进行排序?

我已经尝试了各种方法,包括(python pandas: reverse df column order),但似乎这不适用于MultiIndex

提前致谢

1 个答案:

答案 0 :(得分:0)

试试这个:

tmp.unstack('Date').sort_index(axis=1, ascending=False)

输出:

           profit                      
Date   2017-03-31 2017-02-28 2017-01-31
Branch                                 
A            80.0       40.0       35.0
B             5.0       30.0        NaN