Reputation: 775
import pandas as pd
def func_sum(df, cols, col):
res = df[cols].groupby(col).sum()
return res
def func_count(df, cols,col):
res = df[cols].groupby(col).count()
return res
def func_ave(df, cols, col):
res = df[cols].groupby(col).mean()
return res
The way I did to combine these three functions is like below, which is not very elegant.
def func(df, cols, col, method):
if method == 'sum':
return df[cols].groupby(col).sum()
if method == 'count':
return df[cols].groupby(col).count()
if method == 'mean':
return df[cols].groupby(col).mean()
I wonder if there is a better way to do this without using IF ELSE statement. How Can I Pass the function of (sum, count, or mean) as a variable and then let's the passed function variable to be called inside the main 'func' function.
I would greatly appreciate any suggestions.
Upvotes: 0
Views: 230
Reputation: 13589
Use groupby.agg
, which takes one or more functions by reference or by name.
For example:
def func(df, cols, col, method):
return df[cols].groupby(col).agg(method)
func(df, cols, col, pd.Series.sum)
func(df, cols, col, 'count')
func(df, cols, col, np.mean)
Upvotes: 1