在Python中使用公式中的多个度量值聚合数据

在Python中使用公式中的多个度量值聚合数据,python,aggregation,Python,Aggregation,假设我有一系列的数据,我想通过Cat聚合 Cat Volume Result A 45 4 A 57 3 B 56 3 C 45 1 C 55 2 我想通过cat聚合体积的方差、偏度和峰度以及结果的最大值。我知道如何通过计算体积的方差、偏度和峰度来一个接一个地计算,但我想用这样的方法来巧妙地计算 def f(row): row['ResultM']=row['Result'].

假设我有一系列的数据,我想通过Cat聚合

Cat   Volume   Result

A      45      4
A      57      3
B      56      3
C      45      1
C      55      2
我想通过cat聚合体积的方差、偏度和峰度以及结果的最大值。我知道如何通过计算体积的方差、偏度和峰度来一个接一个地计算,但我想用这样的方法来巧妙地计算

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)
但它不起作用。有人能为我提供如何更正代码的建议吗?谢谢

编辑 让我们试试这个:

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
编辑 让我们试试这个:

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

谢谢我知道这会起作用,但我希望使用这个函数scipy.stats.moment(row['Volume',moment=[2,3,4]),这样我就可以捕捉到所有的瞬间,而不必一个接一个地输入,因为我需要花费很多时间variables@user44137好的,我修改了代码,看起来像是使用stats.moment。您对原始代码的理解非常接近。谢谢,但是当我需要宽幅格式的数据时,它是长格式的。我尝试过这个方法,但它不起作用def(x):df=pd.DataFrame(np.transpose(scipy.stats.moment(x.Volume,moment=[2,3,4])),columns=['var','skew','kurtosis'])df['Result']=x.Result.max()返回df您能在问题中粘贴一份预期输出吗?谢谢。我知道这会起作用,但我希望使用这个函数scipy.stats.moment(row['Volume',moment=[2,3,4]),这样我就可以捕捉到所有的瞬间,而不必一个接一个地输入,因为我需要花费很多时间variables@user44137好的,我修改了代码,看起来像是使用stats.moment。您对原始代码的理解非常接近。谢谢,但是当我需要宽幅格式的数据时,它是长格式的。我尝试过这个方法,但它不起作用def(x):df=pd.DataFrame(np.transpose(scipy.stats.moment(x.Volume,moment=[2,3,4])),columns=['var','skew','kurtosis'])#df['Result']=x.Result.max()返回df您能在问题中粘贴预期输出的副本吗?