如何根据DataFrame列名(年份)为各时间序列应用对应调整系数
问题修复方案
根因说明
你现有代码的问题在于循环过程中adjusted_factor变量会被不断覆盖,循环结束后该变量仅保留最后一列对应的调整系数,调用mul方法时全表都会乘这个单一值,无法实现按列匹配不同系数的需求。
实现代码
方案1:可读性优先写法
import pandas as pd # 统一将列名转为整数类型,避免字符串年份和整数比较出错 df_difference.columns = df_difference.columns.astype(int) # 按列生成对应调整系数 factor_list = [] for year in df_difference.columns: if year < 2020: z = ((year - 2010) / 2020) * 100 adjusted_factor = z * 0.5 else: adjusted_factor = 0.5 factor_list.append(adjusted_factor) # 构造与DataFrame列对齐的系数序列 factor_series = pd.Series(factor_list, index=df_difference.columns) # 按列对应相乘,axis=1表示匹配列维度的索引 df_incremental_difference = df_difference.mul(factor_series, axis=1)
方案2:简洁写法
用列表推导式简化系数生成逻辑:
df_difference.columns = df_difference.columns.astype(int) factor_series = pd.Series( [((y-2010)/2020*100)*0.5 if y < 2020 else 0.5 for y in df_difference.columns], index=df_difference.columns ) df_incremental_difference = df_difference.mul(factor_series, axis=1)
注意:如果你的列名本身已经是整数类型的年份,可以省略转换列名类型的步骤。
内容的提问来源于stack exchange,提问作者cside
相关产品推荐
相关产品推荐

