计算大熊猫数据框上的统计信息

时间:2019-10-19 19:52:46

标签: python python-3.x pandas pandas-groupby

我有以下数据框:

Name   Date   Measurement  Lower     Upper 
blue   N/A     1.2         .2           1
blue   N/A     1.4         .2           1
red    N/A     2.2         .2           1
orange N/A     1.6         .2           1
purple N/A     3.2         .2           1
.
.
.

使用 df = df_old.groupby(['color']).agg({'Measurement':['mean',std']}) 我得到了新的数据框;

       Measurement
Name    mean   std
blue    2.4    .021
orange  1.5    .011
purple  2.2    .023
red     2.1    .054

我还想计算CpK并将其作为列添加到数据框中,如下所示:

       Measurement
Name    mean   std    cpk
blue    2.4    .021    1.2
orange  1.5    .011    .21
purple  2.2    .023    .23
red     2.1    .054    .24

我无法使用agg()函数找到某种方法,例如.agg('cpk')...

1 个答案:

答案 0 :(得分:2)

我建议创建一个自定义函数,该函数使用apply返回一系列均值,std和特定函数(如cpk):

import numpy as np
def f(x):
    d={}
    mu=x['Measurement'].mean()
    std=x['Measurement'].std()
    USL=x.Upper.values[0]
    LSL=x.Lower.values[0]
    cpk=np.min([(USL-mu)/(3*std),(mu-LSL)/(3*std)])
    d['Measurement_mean']=mu
    d['Measurement_std']=std
    d['Measurement_cpk']=cpk
    return pd.Series(d, index=['Measurement_mean', 'Measurement_std',
                                      'Measurement_cpk'])

df=df_old.groupby(['Name']).apply(f)

我将标准公式用于正态分布数据的cpk计算,该公式仅对处于统计控制状态的过程有效。