2016-09-29 70 views
2

我有一個PandasDataFrame名爲df它包含ncolumns。其中一個columns被命名爲COUNT,它顯示A發生的次數。 A包含唯一標識符,因此columnCOUNT中的每行都有值1。它看起來像這樣:熊貓pivot_table來計算保證金的份額

A  B  C  D E  COUNT 
id1  cat1 1  a 15  1  
id2  cat2 2  b 14  1 
id3  cat2 2  c 14  1 
id4  cat1 1  d 15  1 
id5  cat3 2  e 14  1 
..... 

現在我想改變我df看起來像這樣:

   14  15  
cat1_tot  NaN  2  
cat1_share  NaN  1  
cat2_tot  2  NaN  
cat2_share  0.6666 NaN  
cat3_tot  1  NaN  
cat3_share  0.3333 NaN 
All    3  2 

我可以用pd.pivot_table

pd.pivot_table(
    df, 
    values='COUNT', 
    index=['B'], 
    columns=['E'], 
    margins=True, 
    aggfunc=np.sum 
) 

得到catx_tot但我怎麼加分享給這個?

回答

1

groupby.transform

size = df.groupby(['B', 'E']).size() 
sums = size.groupby(level='E').transform(np.sum) 
aggd = pd.concat([size, size/sums], axis=1, keys=['total', 'share']) 

aggd.unstack().stack(0) 

enter image description here


結合groupby.size得到All

all_ = aggd.groupby(level='E').sum().total.rename(('All', 'total')) 
aggd.unstack().stack(0).append(all_) 

enter image description here