我有以下数据框:
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')...
答案 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计算,该公式仅对处于统计控制状态的过程有效。