使用公式

时间:2017-06-08 07:49:37

标签: 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'].max()
    row['Variance'] = pd.DataFrame(scipy.stats.moment(row['Volume'], moment=[2,3,4]))
return 

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

但它不起作用。任何人都可以提供如何更正我的代码的建议吗?感谢

1 个答案:

答案 0 :(得分: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