如何在Python中使用apply()函数将变量归一化至0-30区间?
如何在变量归一化场景中使用Pandas的apply()函数
核心逻辑
你要实现的是将Portfolio Environmental Score列的数值归一化到0-30区间,对应的公式为:normalized = 30 * (x - min_value) / (max_value - min_value)
其中min_value是该列的全局最小值,max_value是该列的全局最大值。
apply()的具体用法
在这个场景里,apply()的作用是遍历esg_funds['Portfolio Environmental Score']这个Series的每一个元素,对每个元素执行你定义的计算逻辑:
1. 定义计算逻辑(lambda函数)
lambda函数接收列中的单个元素x,代入归一化公式完成计算:
lambda x: 30*(x - esg_funds['Portfolio Environmental Score'].min())/(esg_funds['Portfolio Environmental Score'].max() - esg_funds['Portfolio Environmental Score'].min())
这里的min()和max()是针对整个Portfolio Environmental Score列计算的,所以在lambda函数中直接调用就能获取全局的最小/最大值。
2. 调用apply()执行归一化
把lambda函数传入apply()方法,它会自动对列内的每个元素应用这个函数,最终返回一个包含归一化结果的新Series:
new_escore = esg_funds['Portfolio Environmental Score'].apply(lambda x: 30*(x-esg_funds['Portfolio Environmental Score'].min())/(esg_funds['Portfolio Environmental Score'].max()-esg_funds['Portfolio Environmental Score'].min()))
优化写法(可选)
为了让代码更简洁,同时减少重复计算的开销,可以提前算出列的最小和最大值:
env_score_col = esg_funds['Portfolio Environmental Score'] min_val = env_score_col.min() max_val = env_score_col.max() new_escore = env_score_col.apply(lambda x: 30*(x - min_val)/(max_val - min_val))
内容的提问来源于stack exchange,提问作者user19463887
相关产品推荐
相关产品推荐

