Вычисление статистики для группы данных панд - PullRequest
0 голосов
/ 19 октября 2019

У меня есть следующий фрейм данных:

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 Ответ

2 голосов
/ 20 октября 2019

Я предлагаю создать пользовательскую функцию, которая возвращает серию среднего, стандартного значения и конкретную функцию, например cpk, с использованием apply:

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 нормально распределенных данных. , который действителен только для процессов, находящихся в состоянии статистического контроля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...