2014-01-07 59 views
2

考慮以下數據框:通過玩熊貓電子表格類似的表格

Example

我來了很遠:

import pandas as pd 
import numpy as np 

df = pd.DataFrame({ 
    'split_1':[1,2,2,2,1,2,2,2,1,1], 
    'split_2':[3,3,3,4,4,4,4,3,3,3], 
    'var_1':[1,2,4,3,2,4,2,2,1,2], 
    'var_2':[4,2,2,2,1,5,4,3,4,3], 
}) 

我想才達到是一個表格,類似(或完全相同)這樣的用groupby和agg方法。

grp = df.groupby(['split_1','split_2']) 

tab1 = grp['var_1'].agg([np.mean, np.median, np.max, np.min, np.size]) 
tab2 = grp['var_2'].agg([np.mean, np.median, np.max, np.min, np.size]) 

tab = tab1.append(tab2) 

這似乎hackish的......我似乎無法找到一種方法(或文檔看起來正確的地方),以適當的組並聚集在我想要的數據。

有沒有正確的方法?

回答

4

這可能是一點點清潔:

In [15]: grp = df.groupby(['split_1','split_2']) 

In [16]: grp.agg([np.mean, np.median, np.max, np.min, np.size]).stack(0) 
Out[16]: 
          mean median amax amin size 
split_1 split_2           
1  3  var_1 1.333333  1  2  1  3 
       var_2 3.666667  4  4  3  3 
     4  var_1 2.000000  2  2  2  1 
       var_2 1.000000  1  1  1  1 
2  3  var_1 2.666667  2  4  2  3 
       var_2 2.333333  2  3  2  3 
     4  var_1 3.000000  3  4  2  3 
       var_2 3.666667  4  5  2  3 

基本上,沒有必要設定的功能分別向兩組,結果追加在一起。這基本上是由什麼小組做的:拆分,應用(分開)和組合。

+0

謝謝!另外:我可以用這種方法得到我的確切格式,並在DataFrame上調用'''reset_index()'''。 – madflow