我们可以在pivot-table pandas中拥有多维值吗?

时间:2013-09-23 02:52:56

标签: python pandas pivot-table

我正在使用pandas库在csv文件中创建数据透视表。

pivot_table代码的通常格式类似于底部代码。

 tips=read_csv('tips.csv')
`table=pd.pivot_table(tips, values='tip_pct', rows=['time', 'sex'], cols='smoker')`

我想知道我们是否可以在值字段中添加多个维度,如下所示?

List=read_csv('list.csv')
table=pd.pivot_table(List, values=['Applications','Acquisitions'], rows='Sub-Product',cols='Application Date', aggfunc='sum')

我尝试了上面的代码,但格式错误,所以我希望有另一种方法来获取它?

最终我想得到这个

http://i.stack.imgur.com/cifML.png

我现在能得到的只是

http://i.stack.imgur.com/4mbzK.png

这是我原来的list.csv文件的一部分,我正在尝试转换为数据透视表。

Application Date    Sub-Product Applications    Acquisitions
11/1/12                   GP              1    1
11/1/12                   GP              1    1
11/2/12                   GP              1    1
11/2/12                   GP              1    1
11/3/12                   GP              1    1
11/3/12                   GPF             1    1
11/4/12                   GPF             1    1
11/4/12                   GPF             2    2
11/5/12                   GPF             1    1
11/5/12                   GPF             1    1
11/6/12                   GPF             1    1





   This is what im trying to achieve for my pivot table. 

     1. Cols : Application Date
     2. Row labels: Sub-Product
     3. Values: Application, Acquisitions

            Row Labels        11/1/2012 11/2/2012   11/3/2012
            **GP**          
            Applications    190     207            65
            Acquisitions    164     168            54
            **GPF**         
            Applications    1391      1430           1269
            Acquisitions    1124      1142           992
            **Innovative Gateway**          
            Applications    2      1    
            Acquisitions    2      1

但我得到的是

  Sub-Product   ('Applications', '1/1/13')('Applications', '1/10/13')
    GP                                48    134 
    GPF                              600    1099    
    Innovative Gateway               1    2

这是我的代码:

> list=pd.read_csv("List.csv") 
> df=DataFrame(list)
> table=pd.pivot_table(df,values=['Applications','Acquisitions'], rows='Sub-Product',cols='Application Date',aggfunc=np.sum)
>table.to_csv('file.csv')

所以现在的问题是我无法为值字段设置多个值,并且日期似乎混乱了。请帮忙!

由于


日期问题可以通过

解决
xl2["Application Date"] = pd.to_datetime(xl2["Application Date"], format="%m/%d/%y")

现在我唯一的问题是值字段不能占用多个值,并且想知道是否有人知道如何使用堆栈或重塑函数。

1 个答案:

答案 0 :(得分:2)

是的,它将它们添加为顶级列级别:

In [1]: df = pd.DataFrame(np.random.randint(0, 3, (5, 5)), columns=list('abcde'))

In [2]: df
Out[2]:
   a  b  c  d  e
0  2  1  1  2  0
1  0  1  2  0  2
2  1  1  1  0  2
3  0  0  1  1  0
4  2  0  2  0  1

In [3]: df.pivot_table(values=['a', 'b'], rows='c', cols='d')
Out[3]:
   a            b
d  0   1   2    0   1   2
c
1  1   0   2  1.0   0   1
2  1 NaN NaN  0.5 NaN NaN