基于y的年度月度平均增长率生成特征的简洁实现方法问询
简洁实现月度几何平均增长率特征生成
需求说明
基于月度数据集生成过去n年的几何平均增长率特征(如y_agr_last2、y_agr_last3等),计算公式为:
[(1+r₁)(1+r₂)...(1+rₙ)]^(1/n)-1
其中r为对应年度同月的y值(百分比形式),例如2022年9月的y_agr_last2是过去2年同月y值的几何平均增长率。
原代码问题
原实现需要手动创建多个shift临时列,再重复编写计算逻辑,代码冗余且扩展性差——新增年份特征时需重复编写多段相似代码。
简洁实现方案
通过循环批量生成特征,无需创建临时shift列,代码更简洁且易于扩展:
import pandas as pd # 定义需要生成特征的年份数列表,可按需添加(如[2,3,4,5]) target_years = [2, 3, 4] for n in target_years: # 批量获取过去n年对应月份的(1+r)序列,计算乘积 year_series = [(df['y'].shift(12*i)/100) + 1 for i in range(1, n+1)] # 计算几何平均增长率并生成对应列 df[f'y_agr_last{n}'] = pd.concat(year_series, axis=1).prod(axis=1) ** (1/n) - 1
方案优势
- 扩展性强:新增年份特征仅需在
target_years列表中添加对应数字 - 无冗余代码:避免重复编写shift和计算逻辑
- 节省内存:无需创建并删除临时shift列
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

