大熊猫枢轴表如何添加嵌套列

问题描述:

DF大熊猫枢轴表如何添加嵌套列

billsec  disposition Date   Hour 
0 185   ANSWERED  2016-11-01  00 
1 0    NO ANSWER  2016-11-01  00 
2 41    ANSWERED  2016-11-01  01 
3 4    ANSWERED  2016-12-02  05 

有一个表,我需要把它弄出来的汇总表数据如下:

enter image description here

的行是一天中的几小时,而列是日期,在呼叫总数/错过/总的通话时间内。

如何在此表中添加其他列(全部,丢失,时间)。到目前为止,我只计算了每小时通话的总时间和总数。真相在不同的表...

df.pivot_table(rows='Hour',cols='Date',aggfunc=len,fill_value=0) 
df.pivot_table(rows='Hour',cols='Date',aggfunc=sum,fill_value=0) 
+2

欢迎来到*。请将您的数据集作为文本发布,以便人们可以复制并粘贴它们,并将它们用于编码答案 - 当您使用图像时,这是不可能的。请阅读[如何使良好的可重复熊猫示例](http://*.com/questions/20109391/how-to-make-good-reproducible-pandas-examples) – MaxU

+1

@MaxU更正,我希望是正确的 – luboff

+0

可以你还解释了你希望如何计算'All','Lost','Time'列? – MaxU

IIUC你能做到这样:

假设我们有以下的数据帧:

In [248]: df 
Out[248]: 
      calldate billsec disposition 
0 2016-11-01 00:05:26  185 ANSWERED 
1 2016-11-01 00:01:26  0 NO ANSWER 
2 2016-11-01 00:05:19  41 ANSWERED 
3 2016-11-01 00:16:02  4 ANSWERED 
4 2016-11-02 01:16:02  55 ANSWERED 
5 2016-11-02 02:02:02  2 NO ANSWER 

,我们可以做到以下几点:

funcs = { 
    'billsec': { 
     'all':'size', 
     'time':'sum' 
    }, 
    'disposition': { 
     'lost': lambda x: (x == 'NO ANSWER').sum() 
    } 
} 

(df.assign(d=df.calldate.dt.strftime('%d.%m'), t=df.calldate.dt.hour) 
    .groupby(['t','d'])[['billsec','disposition']].agg(funcs) 
    .unstack('d', fill_value=0) 
    .swaplevel(axis=1) 
    .sort_index(level=[0,1], axis=1) 
) 

收益率:

d 01.11   02.11 
    all time lost all time lost 
t 
0  4 230 1  0 0 0 
1  0 0 0  1 55 0 
2  0 0 0  1 2 1