You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:06:04