2017-02-13 83 views
1

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

歡迎來到StackOverflow。請將您的數據集作爲文本發佈,以便人們可以複製並粘貼它們,並將它們用於編碼答案 - 當您使用圖像時,這是不可能的。請閱讀[如何使良好的可重複熊貓示例](http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples) – MaxU

+1

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

+0

可以你還解釋了你希望如何計算'All','Lost','Time'列? – MaxU

回答

0

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