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

如何按日滑动2个月窗口筛选4个月的Pandas DataFrame?

实现Pandas中按日滑动的2个月时间窗口筛选数据

我明白你想要的是整体按日滑动的2个月时间窗口——也就是每天窗口的起始和结束日期都往后推一天,而不是只动结束日期。之前的代码之所以没达到效果,是因为你固定了窗口的起始点为数据的最早日期,导致窗口只在末尾扩展,没有整体滑动。

下面是能实现你需求的完整方案:

步骤1:确保日期列是datetime类型

首先得保证你的Datetime列是Pandas能识别的datetime格式,不然日期计算会出错:

import pandas as pd
from dateutil.relativedelta import relativedelta

# 转换Datetime列为datetime类型
df['Datetime'] = pd.to_datetime(df['Datetime'])

步骤2:生成所有滑动窗口的起始日期

我们需要从数据的最早日期开始,到「最晚日期减去2个月」为止,每天生成一个起始日期——这样每个窗口都能覆盖完整的2个月数据:

# 获取数据的最早和最晚日期(保留日期部分,也可以保留时间戳)
min_date = df['Datetime'].min().date()
max_date = df['Datetime'].max().date()

# 计算最后一个有效起始日期:最晚日期往前推2个月
last_valid_start = max_date - relativedelta(months=2)

# 生成所有按日递增的起始日期
start_dates = pd.date_range(start=min_date, end=last_valid_start, freq='D')

步骤3:循环筛选每个滑动窗口的数据

对每个起始日期,计算对应的结束日期(起始+2个月),然后筛选出这个时间范围内的数据:

for start_date in start_dates:
    # 计算窗口的结束日期
    end_date = start_date + relativedelta(months=2)
    
    # 筛选窗口内的数据:注意这里的>=和<,避免重复包含边界
    window_df = df[(df['Datetime'] >= start_date) & (df['Datetime'] < end_date)]
    
    # 这里可以根据需求处理数据,比如打印、保存到文件等
    print(f"=== 窗口:{start_date.date()} 至 {end_date.date()} ===")
    print(window_df)
    print("\n")

关键说明

  • 这个方案中,每个窗口的起始日期每天递增一天,结束日期随之自动后推2个月,完美实现了窗口整体滑动的效果,和你期望的输出一致。
  • 如果你的数据包含具体的时分秒(比如示例中的14:30:00),想要窗口的起始时间也对应时分秒的话,可以把min_date换成带时间戳的min_datetime = df['Datetime'].min(),然后start_dates用pd.date_range(start=min_datetime, end=last_valid_start_datetime, freq='D'),这样窗口的时间范围会更精确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:23:14