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

在R中为多列时间序列动态识别起始与结束月份

动态确定时间序列各项目的起止日期逻辑实现

核心逻辑

针对每个项目(DataFrame列),按以下规则确定起止日期:

  • 起始月:找到第一个非0数据点,若该点前至少有连续3个月为0,则取此点的日期作为起始;否则保留原数据的最早日期。
  • 结束月:找到最后一个非0数据点,若该点后至少有连续3个月为0,则取此点的日期作为结束;否则保留原数据的最晚日期。

代码实现(基于Pandas)

1. 预处理:确保日期索引合规

先将DataFrame的索引转换为月度频率的DatetimeIndex(根据数据实际频率调整,比如MS代表月初,M代表月末):

import pandas as pd

# 转换索引为DatetimeIndex并设置月度频率
df = df.set_index(pd.to_datetime(df.index))
df = df.asfreq('MS')  # 按需调整频率,比如'D'代表日度、'QS'代表季度

2. 编写单列日期范围计算函数

封装逻辑为可复用函数,输入单列数据,返回该列的起止日期:

def get_col_date_range(col_data):
    # 标记0值与非0值
    is_zero = col_data == 0
    
    # 处理起始日期
    first_non_zero_idx = col_data.ne(0).idxmax()  # 第一个非0值的索引
    # 取该点之前的3个连续数据
    prev_3_months = col_data.loc[:first_non_zero_idx].iloc[-4:-1]
    # 检查是否满足"前3个月全为0"且数据长度足够
    if len(prev_3_months) == 3 and (prev_3_months == 0).all():
        start_date = first_non_zero_idx
    else:
        start_date = col_data.index[0]
    
    # 处理结束日期
    last_non_zero_idx = col_data.ne(0)[::-1].idxmax()  # 最后一个非0值的索引
    # 取该点之后的3个连续数据
    next_3_months = col_data.loc[last_non_zero_idx:].iloc[1:4]
    # 检查是否满足"后3个月全为0"且数据长度足够
    if len(next_3_months) == 3 and (next_3_months == 0).all():
        end_date = last_non_zero_idx
    else:
        end_date = col_data.index[-1]
    
    return start_date, end_date

3. 整合到异常值识别循环

遍历每个项目列,动态获取Start_Year、Start_Month、End_Year、End_Month,并执行异常值清洗逻辑:

for col in df.columns:
    col_data = df[col]
    # 获取当前列的起止日期
    start_date, end_date = get_col_date_range(col_data)
    
    # 拆分年、月参数
    Start_Year = start_date.year
    Start_Month = start_date.month
    End_Year = end_date.year
    End_Month = end_date.month
    
    # ********** 这里插入你的异常值识别/清洗代码 **********
    # 示例:筛选当前列的有效时间范围数据
    filtered_data = col_data.loc[f"{Start_Year}-{Start_Month}":f"{End_Year}-{End_Month}"]
    # 执行异常值检测逻辑...

关键细节说明

  • 若数据开头第一个点就是非0,或前3个月不全为0,则直接保留原数据的最早日期作为起始。
  • 若数据末尾最后一个点就是非0,或后3个月不全为0,则直接保留原数据的最晚日期作为结束。
  • 频率参数asfreq('MS')需根据实际数据周期调整,确保时间序列连续无缺失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 09:10:27