2017-06-08 157 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