【问题标题】:Reshaping pandas dataframe - (Pivot/Stack-unstack)重塑 pandas 数据框 - (Pivot/Stack-unstack)
【发布时间】:2019-11-14 11:35:32
【问题描述】:

我有这样的数据框:

我想将其重塑为:

我尝试过: df2.pivot(index ='color', columns ='quarter') 但出现错误

KeyError: 'color' 在处理上述异常的过程中,又出现了一个异常:

还可以堆叠和取消堆叠,但没有得到想要的结果。请帮忙。

【问题讨论】:

  • print (df2.info()) 是什么?

标签: pandas stack reshape


【解决方案1】:

DataFrame.unstackDataFrame.swaplevelDataFrame.sort_index 一起使用:

df2 = pd.DataFrame({
        'color':list('abcabc'),
         'B':[4,5,4,5,5,4],
         'C':[7,8,9,4,2,3],
         'D':[1,3,5,7,1,0],
         'quarter':['FY2015_16_Q1'] * 3 + ['FY2015_16_Q2'] * 3 
}).set_index(['quarter','color'])

print (df2)
                    B  C  D
quarter      color         
FY2015_16_Q1 a      4  7  1
             b      5  8  3
             c      4  9  5
FY2015_16_Q2 a      5  4  7
             b      5  2  1
             c      4  3  0

print (df2.index)
MultiIndex([('FY2015_16_Q1', 'a'),
            ('FY2015_16_Q1', 'b'),
            ('FY2015_16_Q1', 'c'),
            ('FY2015_16_Q2', 'a'),
            ('FY2015_16_Q2', 'b'),
            ('FY2015_16_Q2', 'c')],
           names=['quarter', 'color'])

df = df2.unstack(0).swaplevel(0,1, axis=1).sort_index(axis=1, level=0)

或者DataFrame.stackunstack

df = df2.stack().unstack([0,2])

print (df)
quarter FY2015_16_Q1       FY2015_16_Q2      
                   B  C  D            B  C  D
color                                        
a                  4  7  1            5  4  7
b                  5  8  3            5  2  1
c                  4  9  5            4  3  0

【讨论】: