如何在Pandas的df.apply中传递额外参数实现自定义评分?
在Pandas的apply中传递额外参数给自定义函数
嘿,这个问题我之前处理过,其实Pandas的apply方法有好几种简洁的方式来传递额外参数,我给你整理几个常用的方案:
方案1:用lambda匿名函数做中间层
这是最直观的方式,用lambda把遍历到的每个值和额外参数一起传给目标函数:
# 先提前计算好阈值字典 scores = get_score_threshold(pred_df) # 通过lambda传递scores参数 df['grade'] = df['pred'].apply(lambda x: score_pred(x, scores))
方案2:使用apply自带的args参数
Pandas的apply本身支持args参数,它接受一个元组,里面的元素会作为额外参数依次传给目标函数:
scores = get_score_threshold(pred_df) # 注意args是元组,单个参数也要加逗号避免被识别为单个值 df['grade'] = df['pred'].apply(score_pred, args=(scores,))
方案3:用functools.partial预先绑定参数
如果这个scores参数会被多次使用,可以用partial预先把参数绑定到函数上,生成一个新的函数再调用:
from functools import partial scores = get_score_threshold(pred_df) # 预先把scores绑定到score_pred的第二个参数 scorer = partial(score_pred, scores=scores) # 直接调用绑定好参数的函数 df['grade'] = df['pred'].apply(scorer)
另外补充下,你的score_pred函数里的分支可以补全得更完整,比如:
def score_pred(pred, scores): if pred >= scores['a_thresh']: return 'A' elif pred >= scores['b_thresh']: return 'B' elif pred >= scores['c_thresh']: return 'C' else: return 'D'
内容的提问来源于stack exchange,提问作者jasnonaz
相关产品推荐
相关产品推荐

