数据透视表小计

时间:2013-04-01 20:32:36

标签: python pandas pivot-table

我有一个数据框:

product = DataFrame({'_product': ['shoes','dress','cap','shoes','purse','t-shirt','t-shirt','dress','t-shirt'], 
             'city': ['A','A','A','B','A','A','B','C','A'],
             'color':['red','black','black','white','black','green','white','yellow','blue'],
             'size':['36','S','M','40','-','L','L','M','S'],
             'param1':['x0001','x0008','x0006','x0002','x0001','x0009','x0011','x0003','x0001'],
             'param2':[23,1,367,689,35,97,100,44,15],
             'param3':['f1','t1','u7','f1','r4','f2','f2','t2','f4'],
             'counter':[1,1,1,1,1,1,1,1,1]})

table=product[['_product','city','color','size','param1','param2','param3','counter']]

应用

pivot_product=pivot_table(table,values=['counter'],rows=['_product','city','color','size','param1','param2','param3'],aggfunc=[np.sum],fill_value=0,margins=True)

我得到一个只有Grand Total行的数据透视表(“All”)。

这是一个假设的样本,实际上我导入了一个包含10万行和20列的表格。

!!我绝对有必要在产品层面上使用小计。

是否有任何有效的方法可以将带有小计的行插入到此表中,就像具有字段设置>布局&amp ;;的Excel数据透视表一样。打印>“以表格形式显示项目标签”允许吗?

1 个答案:

答案 0 :(得分:1)

我不熟悉Excel中的这个操作,但这里只是一个按产品计算小计的单行。

In [43]: pivot_product['subtotals'] = pivot_product[('sum', 'counter')].groupby(level=0).transform(np.sum)

In [44]: pivot_product
Out[44]: 
                                                    sum  subtotals
                                                counter           
_product city color  size param1 param2 param3                    
cap      A    black  M    x0006  367    u7            1          1
dress    A    black  S    x0008  1      t1            1          2
         C    yellow M    x0003  44     t2            1          2
purse    A    black  -    x0001  35     r4            1          1
shoes    A    red    36   x0001  23     f1            1          2
         B    white  40   x0002  689    f1            1          2
t-shirt  A    blue   S    x0001  15     f4            1          3
              green  L    x0009  97     f2            1          3
         B    white  L    x0011  100    f2            1          3
All                                                   9          9

根据“计数器”列的含义,您可能希望np.size使用np.count