在R中按时间序列与站点分组拆分气象数据为训练集验证集
多站点时序数据按站点等比例拆分方案
使用Pandas即可实现需求,核心逻辑为按站点分组后,每个组单独按时间顺序截取对应比例的训练/验证集,不受各站点观测长度差异影响:
步骤1:导入依赖&构造示例数据
import pandas as pd # 构造示例数据集 df = pd.DataFrame({ 'Station': ['A', 'A', 'A', 'A', 'B', 'B'], 'Date': pd.to_datetime(['2012-01-01', '2012-01-02', '2012-01-03', '2012-01-04', '2012-01-01', '2012-01-02']), 'temp': [-0.8, 0.1, 0.5, 0.4, 0.1, 0.5] })
步骤2:设置参数&执行拆分
# 训练集占比,可根据需求调整 train_ratio = 0.5 # 先按站点+日期排序,保证单个站点的时间序列顺序正确 df_sorted = df.sort_values(by=['Station', 'Date']).reset_index(drop=True) # 拆分训练集:每个站点取排序后前train_ratio比例的数据 train_df = df_sorted.groupby('Station', group_keys=False).apply( lambda x: x.iloc[:int(len(x) * train_ratio)] ).reset_index(drop=True) # 拆分验证集:每个站点取排序后剩余的数据 val_df = df_sorted.groupby('Station', group_keys=False).apply( lambda x: x.iloc[int(len(x) * train_ratio):] ).reset_index(drop=True)
如果遇到站点观测数为奇数的场景,需要向上取整训练集行数,可把int(len(x)*train_ratio)替换为math.ceil(len(x)*train_ratio),使用前导入math库即可
内容的提问来源于stack exchange,提问作者tabumis
相关产品推荐
相关产品推荐

