将pivot_table值移动到行

时间:2015-05-14 20:50:35

标签: python pandas

是否可以将传递给values参数的列按行定位?我遇到问题的一个例子:

import datetime

df = pd.DataFrame({'A': ['one', 'one', 'two', 'three'] * 6,
                   'B': ['A', 'B', 'C'] * 8,
                   'C': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 4,                            
                   'D': np.random.randn(24),                            
                   'E': np.random.randn(24),                            
                   'F': [datetime.datetime(2013, i, 1) for i in range(1, 3)] * 12
                   })

这会产生以下数据帧:

        A  B    C         D         E          F
0     one  A  foo -0.152738  2.407996 2013-01-01
1     one  B  foo -1.113901  0.597699 2013-02-01
2     two  C  foo -0.587265 -0.878725 2013-03-01
3   three  A  bar -0.734618 -0.252295 2013-04-01
4     one  B  bar  0.359421  1.181750 2013-05-01
5     one  C  bar -0.303491  0.473419 2013-06-01
6     two  A  foo -0.275638  0.360602 2013-07-01

应用pivot_table

>>> df.pivot_table(index=['A','B','C'], columns='F', values=['D','E'])

                     D                     E           
F           2013-01-01 2013-02-01 2013-01-01 2013-02-01
A     B C                                              
one   A bar        NaN   0.878219        NaN  -0.004981
        foo  -0.164395        NaN  -0.254941        NaN
      B bar   1.239046        NaN   1.265536        NaN
        foo        NaN   0.181584        NaN   0.449861
      C bar        NaN  -0.823104        NaN  -0.317757
        foo  -1.784723        NaN   0.169650        NaN
three A bar        NaN   1.228297        NaN   0.467856
      B foo        NaN   0.065234        NaN   0.061998
      C bar        NaN   0.738302        NaN   0.908946
two   A foo  -0.227953        NaN  -1.067442        NaN
      B bar   0.336351        NaN  -0.522268        NaN
      C foo  -0.279180        NaN   0.335666        NaN

我想要D,E和D列; F显示在MultiIndex行下,只保留列的日期。

1 个答案:

答案 0 :(得分:1)

堆叠你的第一级:

>>> df.pivot_table(index=['A','B','C'], columns='F', values=['D','E']).stack(0)

F              2013-01-01  2013-02-01
A     B C                            
one   A bar D         NaN   -0.326106
            E         NaN   -0.882319
        foo D    0.147015         NaN
            E   -0.121944         NaN
      B bar D    0.133723         NaN
            E    0.182735         NaN
        foo D         NaN    0.158913
            E         NaN    0.365275
      C bar D         NaN    0.495230
            E         NaN    1.098515
        foo D   -0.624333         NaN
            E    0.214979         NaN
three A bar D         NaN    0.101431
            E         NaN   -0.352368
      B foo D         NaN    0.405091
            E         NaN    0.389888
      C bar D         NaN    0.804457
            E         NaN   -0.572397
two   A foo D    0.127069         NaN
            E    0.105038         NaN
      B bar D   -1.052195         NaN
            E    0.728630         NaN
      C foo D   -0.643464         NaN
            E   -0.440381         NaN