2017-06-08 198 views
1

假設我有一系列數據,我想通過貓聚合數據

Cat Volume Result 

A  45  4 
A  57  3 
B  56  3 
C  45  1 
C  55  2 

聚集我想聚集體積和最大的方差,偏度以及峯度由貓結果。我知道如何通過計算量的方差,偏度和峯度做逐一但我想它巧妙地與這樣的

def f(row): 
    row['ResultM']=row['Result'].max() 
    row['Variance'] = pd.DataFrame(scipy.stats.moment(row['Volume'], moment=[2,3,4])) 
return 

TestData=OrgData.groupby('Id').apply(f) 

但它不工作。任何人都可以提供建議如何我可以更正我的代碼?由於

回答

0

編輯

def f(x): 
    df = pd.DataFrame(scipy.stats.moment(x.Volume.astype(int),moment=[2,3,4]),index=['var','skew','kurtosis']).T 
    df['result_max'] = x.Result.astype(int).max() 
    return df 

df.groupby('Cat').apply(f) 

讓我們試試這個:

from scipy import stats 

OrgData.groupby('Cat').agg({'Result':'max','Volume':[stats.skew,np.var,stats.kurtosis]}) 

輸出:

Result Volume    
     max skew var kurtosis 
Cat        
A  4  0 72.0  -2 
B  3  0 NaN  -3 
C  2  0 50.0  -2 
+0

感謝。我知道這會工作,但我希望使用這個功能 scipy.stats.moment(row ['Volume'],moment = [2,3,4])) 所以我可以捕捉所有的時刻,而不必因爲我必須做很多變量,所以我一個一個地鍵入 – user44137

+0

@ user44137好的,我修改了代碼以查看使用stats.moment。你真的很接近你的原始代碼。 –

+0

謝謝,但是當我需要廣泛的數據時,這些數據是長形式的。我試過但不起作用 def f(x): df = pd.DataFrame(np.transpose(scipy.stats.moment(x.Volume,moment = [2,3,4])), [=結果'] = x.Result.max() 返回df – user44137