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

如何将dataframe指定时段值替换为历史同期数据的加权计算结果

实现方案

使用pandas即可实现需求,代码支持灵活配置参考年份、权重、替换范围,可满足跳过指定年份的要求。

完整实现代码

import pandas as pd

# 构造示例数据,实际使用时替换为你自己的数据集即可
data = {
    'Year': [2018,2018,2018,2019,2019,2019,2020,2020,2020,2021,2021,2021],
    'Week': [1,2,3,1,2,3,1,2,3,1,2,3],
    'Value': [25,28,26,24,34,30,27,33,32,39,43,41]
}
df = pd.DataFrame(data)

# -------------------------- 以下为可自定义配置项 --------------------------
target_year = 2021  # 需要替换数值的目标年份
target_weeks = [1,2,3]  # 需要替换数值的周范围
# 加权规则:键为参考年份,值为对应权重,可按需增删修改参考年份实现跳过指定年份的需求
weight_config = {
    2020: 0.45,
    2019: 0.3,
    2018: 0.25
}
# -------------------------------------------------------------------------

# 数据转宽表,索引为周,列为年份,方便取同期数值
df_pivot = df.pivot(index='Week', columns='Year', values='Value')

# 按权重计算同期加权值
df_pivot['calc_result'] = 0
for ref_year, weight in weight_config.items():
    df_pivot['calc_result'] += df_pivot[ref_year] * weight

# 将计算结果替换回原数据集
for week in target_weeks:
    calc_val = df_pivot.loc[week, 'calc_result']
    df.loc[(df['Year'] == target_year) & (df['Week'] == week), 'Value'] = calc_val

# 打印结果验证
print(df[df['Year'] == target_year])

配置调整说明

  • 替换目标调整:修改target_year和target_weeks参数即可指定要替换的年份和对应周数,未指定的周数会保留原始数值
  • 加权规则调整:修改weight_config字典即可,可按需增删参考年份,比如需要跳过2018年,使用2020、2019、2016年数据加权,直接将字典修改为weight_config = {2020: 0.45, 2019:0.3, 2016:0.25}即可,只要原数据集包含对应年份的周度数据即可正常计算。

内容的提问来源于stack exchange,提问作者etuo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:21:03