unstack" multi-indexed"列|在熊猫

时间:2014-11-20 16:02:47

标签: python pandas dataframe

在pandas中我有一个数据帧如下(第一行是列,第二行现在只是一行)

   2012    2013      2012    2013
   women   women     men     men
0  14       43        24       45
1  34       54        35       65   

并希望得到它

       women    men
2012 0  14       24 
2012 1  34       35 
2013 0  43       45 
2013 1  54       65 

使用df.stack,df.unstack没有到达任何地方?

任何优雅的解决方案?

2 个答案:

答案 0 :(得分:2)

In [5]: df
Out[5]: 
   2012      2013
  women men women men
0     0   1     2   3
1     4   5     6   7

我们的想法是首先将列的第一级堆叠到第一级索引,然后交换两个索引(pandas.DataFrame.swaplevel

In [6]: df.stack(level=0).swaplevel(0,1,axis=0)
Out[6]: 
        men  women
2012 0    1      0
2013 0    3      2
2012 1    5      4
2013 1    7      6

答案 1 :(得分:0)

df.stack很可能是你想要的。请参阅下文,您需要指定您想要的第一级。

In [79]: df = pd.DataFrame(0., index=[0,1], columns=pd.MultiIndex.from_product([[2012,2013], ['women','men']]))

In [83]: df.stack(level=0)
Out[83]: 
        men  women
0 2012    0      0
  2013    0      0
1 2012    0      0
  2013    0      0