Python Pandas-如何使用两个值取消堆叠数据透视表,每个值都成为新列?

时间:2014-03-26 15:12:10

标签: python pandas pivot dataframe

使用以下两个值旋转数据框之后:

import pandas as pd

df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
                       'foo', 'bar', 'foo', 'bar'],
            'B' : ['one', 'one', 'two', 'two',
                      'two', 'two', 'one', 'two'],
            'C' : [56, 2, 3, 4, 5, 6, 0, 2],
            'D' : [51, 2, 3, 4, 5, 6, 0, 2]})

pd.pivot_table(df, values=['C','D'],rows='B',cols='A').unstack().reset_index()

当我取消堆叠枢轴并重置索引两个新列' level_0'和0被创建。 Level_0包含列名C和D,0包含值。

    level_0     A   B   0
0   C   bar     one     2.0
1   C   bar     two     4.0
2   C   foo     one     28.0
3   C   foo     two     4.0
4   D   bar     one     2.0
5   D   bar     two     4.0
6   D   foo     one     25.5
7   D   foo     two     4.0

是否可以取消堆叠框架,以便每个值(C,D)出现在单独的列中,或者我是否必须拆分并连接框架才能实现此目的?感谢。

编辑以显示所需的输出:

    A   B   C   D
0   bar one 2   2
1   bar two 4   4
2   foo one 28  25.5
3   foo two 4   4

1 个答案:

答案 0 :(得分:4)

你想要stack(而不是拆散):

In [70]: pd.pivot_table(df, values=['C','D'],rows='B',cols='A').stack()
Out[70]: 
          C     D
B   A            
one bar   2   2.0
    foo  28  25.5
two bar   4   4.0
    foo   4   4.0

虽然你使用的unstack做了一个'堆栈'操作,因为索引轴中没有MultiIndex(仅在列轴中)。

但实际上,您也可以通过 groupby-operation 到达那里(我认为更合乎逻辑),因为这是您实际执行的操作(将列C和D按A和B分组):

In [72]: df.groupby(['A', 'B']).mean()
Out[72]: 
          C     D
A   B            
bar one   2   2.0
    two   4   4.0
foo one  28  25.5
    two   4   4.0