Home > OS >  Groupby apply or agg with custom function with multiple inputs
Groupby apply or agg with custom function with multiple inputs

Time:08-11

I want to apply custom functions to pandas groupby function.

I was able to apply when my custom function has only 1 input which is the grouped value.

I have dataframe like this:

a     b     c      value
a1    b1    c1      v1
a2    b2    c2      v2
a3    b3    c3      v3

Appliable version:

def cpk(a):
    arr = np.asarray(a)
    arr = arr.ravel()
    sigma = np.std(arr)
    m = np.mean(arr)

    Cpu = float(150 - m) / (3*sigma)
    Cpl = float(m - 50) / (3*sigma)
    Cpk = np.min([Cpu, Cpl])
    return Cpk


df_cpk = df_result.groupby(['a','b','c'])['value'].agg(cpk).reset_index()

As you can see in the above code, the grouped 'value' automatically go to the input of the cpk function.

What I want to know is how to apply below function:

def cpk2(a,lsl,usl):
    arr = np.asarray(a)
    arr = arr.ravel()
    sigma = np.std(arr)
    m = np.mean(arr)

    Cpu = float(usl - m) / (3*sigma)
    Cpl = float(m - lsl) / (3*sigma)
    Cpk = np.min([Cpu, Cpl])
    return Cpk

# df_cpk = df_result.groupby(['a','b','c'])['value'].agg(cpk2(?,?,?)).reset_index()

Where there are multiple inputs to the function, one being the group values. Is there any simple way to do it?

CodePudding user response:

Since the two other inputs are constants, you can simply use a lambda expression:

df_cpk = df.groupby(['a','b','c'])['value'].agg(lambda x: cpk2(x, 50, 150)).reset_index()
  • Related