如何将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
相关产品推荐
相关产品推荐

