2017-05-08 97 views
1

我创建了一个数据透视表,该数据透视表根据其中一列和时间索引的月份进行分组。如何重新编制熊猫数据透视表

这是透视表

    AWRT  AWFT  AWDT 
Time  type         
April All 38.190119 65.789103 27.598984 
     DHW 19.676627 60.889196 41.212569 
     SH 47.342757 61.335566 13.992809 
February All 43.896487 57.982944 14.086457 
     SH 40.864670 50.567133 9.702463 
March All 42.083836 69.139818 27.055982 
     DHW 18.908873 62.936898 44.028024 
     SH 52.249342 70.013904 17.764563 

现在我想二月三月和四月出现在时间,不按字母顺序排列

试图重新索引是这样的:

new_index=[['February', 'March', 'April'], ['All', 'DHW', 'SH']] 
df1=df1.reindex(new_index) 

我获得以下,这不是数据透视表:

 AWRT  AWFT  AWDT 
Time  type         
February All 43.896487 57.982944 14.086457 
March DHW 18.908873 62.936898 44.028024 
April SH 47.342757 61.335566 13.992809 

我也尝试直接访问数据透视表索引的标签,但我被告知这些是不可变的。

在此先感谢您的帮助

回答

2

重新编制有关一级(level=0):

import pandas as pd 

idx = pd.MultiIndex(levels=[['April', 'February', 'March'], ['All', 'DHW', 'SH']], 
        labels=[[0, 0, 0, 1, 1, 2, 2, 2], [0, 1, 2, 0, 2, 0, 1, 2]], 
        names=['Time', 'type']) 
df = pd.DataFrame([[38.190119, 65.789103, 27.598984], 
        [19.676627, 60.889196, 41.212569], 
        [47.342757, 61.335566, 13.992809], 
        [43.896487, 57.982944, 14.086457], 
        [40.864670, 50.567133, 9.702463], 
        [42.083836, 69.139818, 27.055982], 
        [18.908873, 62.936898, 44.028024], 
        [52.249342, 70.013904, 17.764563]], 
        columns=['AWRT', 'AWFT', 'AWDT'], 
        index=idx) 

print(df) 

#      AWRT  AWFT  AWDT 
# Time  type         
# April All 38.190119 65.789103 27.598984 
#   DHW 19.676627 60.889196 41.212569 
#   SH 47.342757 61.335566 13.992809 
# February All 43.896487 57.982944 14.086457 
#   SH 40.864670 50.567133 9.702463 
# March All 42.083836 69.139818 27.055982 
#   DHW 18.908873 62.936898 44.028024 
#   SH 52.249342 70.013904 17.764563 

print(df.reindex(['February', 'March', 'April'], level=0)) 

#      AWRT  AWFT  AWDT 
# Time  type         
# February All 43.896487 57.982944 14.086457 
#   SH 40.864670 50.567133 9.702463 
# March All 42.083836 69.139818 27.055982 
#   DHW 18.908873 62.936898 44.028024 
#   SH 52.249342 70.013904 17.764563 
# April All 38.190119 65.789103 27.598984 
#   DHW 19.676627 60.889196 41.212569 
#   SH 47.342757 61.335566 13.992809 
1

你需要为了创建一个多指数重新编制索引正确:

new_index = pd.MultiIndex.from_product(
    [['February', 'March', 'April'], ['All', 'DHW', 'SH']], 
    names=['Time', 'type'] 
) 
df1.reindex(new_index) 

理想情况下,你会使用一个明确的多指标,但我不知道这是否可能。