2016-09-29 7 views
2

DataFramedfという名前のncolumnsが含まれています。 columnsの1つは、COUNTという名前で、Aの値の何回の値が表示されます。 Aには一意の識別子が含まれているため、すべての行の値は1で、columnCOUNTになります。今、私は私のdfは次のように見えるように変換したいパンダの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 
..... 

   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

All

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

enter image description here

を取得する 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を組み合わせます