python应用lambda函数

python应用lambda函数,python,lambda,aggregate,Python,Lambda,Aggregate,我有一个用例,我需要在另一个参数上应用一个函数参数,这个参数通常是一个列表。例如,我可能需要在列表中应用min、max或sum def calc_df_query(select_col, agg_func, where_col, mn, mx): tmp = globals().get('data')[select_col][globals().get('data')[where_col].between(mn, mx, inclusive=True)] agg_method =

我有一个用例,我需要在另一个参数上应用一个函数参数,这个参数通常是一个列表。例如,我可能需要在列表中应用min、max或sum

def calc_df_query(select_col, agg_func, where_col, mn, mx):
    tmp = globals().get('data')[select_col][globals().get('data')[where_col].between(mn, mx, inclusive=True)]
    agg_method = lambda col,agg: agg(col)
    return (agg_method(tmp, agg_func))

由于上一个return语句,我得到一个错误“str对象不可调用”。我们非常感谢您的帮助。

解决方案是使用字典将字符串映射到pandas.DataFrame函数

dispatcher={'min':pd.DataFrame.min, 'max':pd.DataFrame.max, 'sum': pd.DataFrame.sum, 'mean': pd.DataFrame.mean}
然后是用法:

def calc_df_query(select_col, agg_func, where_col, mn, mx):
    tmp = globals().get('data')[select_col][globals().get('data')[where_col].between(mn, mx, inclusive=True)]
    agg_method = lambda col, agg: agg(col)
    return (agg_method(tmp, dispatcher.get(agg_func)))

感谢您提供的提示

看起来agg_方法将作为字符串返回,然后您将尝试将其用作agg_方法()的函数。因此,error str对象不可调用。您希望
agg_func
是什么?它是一个
str
,不能调用字符串。错误信息非常清楚。据我所知,这与你的
lambda
无关。不过,我不得不说,使用lambda是一种非常奇怪的方式,为什么不
返回agg_func(tmp)
?你为什么要用
lambda
来包装这个呢?它不起任何作用,因为您立即应用它并丢弃它……agg_func确实是一个str(可以有值“mean”、“sum”、“max”、“min”)。显然这就是问题所在,因为当我运行gg_方法(tmp,min)时,它是有效的。如何将“min”之类的字符串转换为实际的min函数?