python - how to use two different functions within crosstab/pivot_table in pandas? -


using pandas, possible compute single cross-tabulation (or pivot table) containing values calculated 2 different functions?

import pandas pd import numpy np  c1 = np.repeat(['a','b'], [50, 50], axis=0) c2 = list('xy'*50) c3 = np.repeat(['g1','g2'], [50, 50], axis=0) np.random.shuffle(c3) c4=np.repeat([1,2], [50,50],axis=0) np.random.shuffle(c4) val = np.random.rand(100)  df = pd.dataframe({'c1':c1, 'c2':c2, 'c3':c3, 'c4':c4, 'val':val})  frequencytable = pd.crosstab([df.c1,df.c2],[df.c3,df.c4]) meanval = pd.crosstab([df.c1,df.c2],[df.c3,df.c4],values=df.val,aggfunc=np.mean) 

so, both rows , columns same in both tables, i'd table both frequencies , mean values:

c3           g1                       g2           c4     1              2              1              2 c1 c2  freq val       freq val       freq val       freq val           x   6    0.624931  5    0.582268  8    0.528231  6    0.362804    y   7    0.493890  8    0.465741  3    0.613126  7    0.312894 b  x   9    0.488255  5    0.804015  6    0.722640  5    0.369480    y   6    0.462653  4    0.506791  5    0.583695  10   0.517954 

you can give list of functions:

pd.crosstab([df.c1,df.c2], [df.c3,df.c4], values=df.val, aggfunc=[len, np.mean]) 

if want table shown in question, have rearrange levels bit:

in [42]: table = pd.crosstab([df.c1,df.c2], [df.c3,df.c4], values=df.val, aggfunc=[len, np.mean])  in [43]: table out[43]:         len                mean                               c3      g1     g2           g1                  g2           c4       1  2   1  2         1         2         1         2 c1 c2                                                         x     4  6   8  7  0.303036  0.414474  0.624900  0.425234    y     5  5   8  7  0.543363  0.480419  0.583499  0.637657 b  x    10  6   4  5  0.400279  0.436929  0.442924  0.287572    y     6  8   5  6  0.400427  0.623319  0.764506  0.408708  in [44]: table.reorder_levels([1, 2, 0], axis=1).sort_index(axis=1) out[44]:  c3      g1                            g2                          c4       1              2              1              2                  len      mean  len      mean  len      mean  len      mean c1 c2                                                              x     4  0.303036    6  0.414474    8  0.624900    7  0.425234    y     5  0.543363    5  0.480419    8  0.583499    7  0.637657 b  x    10  0.400279    6  0.436929    4  0.442924    5  0.287572    y     6  0.400427    8  0.623319    5  0.764506    6  0.408708 

Comments

Popular posts from this blog

How to remove text and logo OR add Overflow on Android ActionBar using AppCompat on API 8? -

html - How to style widget with post count different than without post count -

url rewriting - How to redirect a http POST with urlrewritefilter -