2013-09-23 29 views
2

我正在使用熊猫库在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") 

现在我唯一的问题是,值域着需要超过一个值,并且想知道如果任何人有任何关于如何使用堆栈或重塑函数的想法。

+0

你是什么意思的格式是错误的? –

+0

嗨安迪,你能看看我分享的链接吗? – jxn

+0

它看起来像你可以堆叠/重塑成正确的形式。请复制并粘贴实际文字而不是图片......这似乎与原始参数不匹配:S –

回答

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