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

如何基于年度数据生成加权列?适配多区域及新增数据需求

基于分组时间序列的OO_EST加权平滑实现

核心思路

针对每个Area_Code分组,按Year_Code排序后,通过移位操作获取前后年度的OO_EST值,再根据行在分组内的位置(首年、中间年、最后一年)应用对应的加权公式,代码可自动适配新增数据后的最新年份。

实现代码

import pandas as pd

# 替换为实际数据导入逻辑,比如pd.read_csv()
df = pd.read_csv('your_data.csv')

# 1. 按区域和年份排序,确保时间序列顺序正确
df = df.sort_values(by=['Area_Code', 'Year_Code']).reset_index(drop=True)

# 2. 按区域分组,计算上一年、下一年的OO_EST值
df['prev_OO'] = df.groupby('Area_Code')['OO_EST'].shift(1)
df['next_OO'] = df.groupby('Area_Code')['OO_EST'].shift(-1)

# 3. 按分组内的位置应用加权规则
def compute_smoothed(group):
    # 首年加权
    first_idx = group.index.min()
    group.loc[first_idx, 'smoothingOO'] = 0.75 * group.loc[first_idx, 'OO_EST'] + 0.25 * group.loc[first_idx, 'next_OO']
    
    # 最后一年加权
    last_idx = group.index.max()
    group.loc[last_idx, 'smoothingOO'] = 0.75 * group.loc[last_idx, 'OO_EST'] + 0.25 * group.loc[last_idx, 'prev_OO']
    
    # 中间年份加权
    middle_mask = ~group.index.isin([first_idx, last_idx])
    group.loc[middle_mask, 'smoothingOO'] = 0.25 * group.loc[middle_mask, 'prev_OO'] + 0.5 * group.loc[middle_mask, 'OO_EST'] + 0.25 * group.loc[middle_mask, 'next_OO']
    
    return group

# 应用分组计算
df = df.groupby('Area_Code', group_keys=False).apply(compute_smoothed)

# 清理临时辅助列(可选)
df = df.drop(columns=['prev_OO', 'next_OO'])

适配新增数据

当导入包含新Year_Code的数据时,只需重新运行上述代码:

  • 排序步骤会自动将新年份纳入对应区域的时间序列末尾
  • 分组计算时,group.index.max()会自动识别每组最新的最大年份,将其作为最后一年应用对应的加权规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:42:26