【问题标题】:pandas: Change order of multiindex when using unstackpandas:使用 unstack 时更改多索引的顺序
【发布时间】:2017-06-25 18:14:21
【问题描述】:

我有一个关于 unstack 列排序的问题。让我们采用以下 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

提前致谢

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    试试这个:

    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
    

    【讨论】:

      猜你喜欢
      • 2016-02-09
      • 2019-01-30
      • 2018-07-28
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多