Home > OS >  performing operations on a dataframe based on function args
performing operations on a dataframe based on function args

Time:12-21

I'm looking to perform some slicing on a dataframe and I am repeating the same slices on both the .mean() and .std() results. I am wondering if it would be possible to write a function were mean or std can be defined as an argument. If so, I may later expand these type of df operations to others such as .min() and .max(). Admittedly a limited set, but I'm still curious.

So currently my code looks like this:

df_mean = df.groupby(level=1).mean() 
df_std = df.groupby(level=1).std()
df_std_slice = df_std[(df_mean['A']>10)&(df_mean['B']==1).copy()
df_mean_slice = df_mean[(df_mean['A']>10)&(df_mean['B']==1).copy()

I was wondering if it could look similar to:

def df_slice(df,oper_arg):
    df_mean = df_mean = df.groupby(level=1).mean() #I do need to have a df with mean data
    df_{oper_arg} = df.groupby(level=1).{oper_arg}().copy()
    df_slice = df_{oper_arg}[(df_mean['A']>10)&(df_mean['B']==1).copy()
    return df_slice

CodePudding user response:

Sure you can! agg() exists for this purpose:

def df_slice(df,oper_arg):
    df_mean = df.groupby(level=1).mean()
    df = df.groupby(level=1).agg(oper_arg).copy()
    #                notice ^^^^^^^^^^^^^^
    df_slice = df[(df_mean['A']>10)&(df_mean['B']==1).copy()
    return df_slice
  • Related