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

如何忽略年份筛选Pandas DataFrame指定月日区间数据并优化性能?

无循环的年度日期范围筛选方案

直接利用Pandas DatetimeIndex的month和day属性构建向量化掩码,完全替代循环操作,性能提升显著,尤其适用于大数据集场景。

核心逻辑

我们需要保留以下三类数据:

  • 4月份且日期≥15日
  • 5-8月份的所有日期
  • 9月份且日期≤16日

将这三个条件通过逻辑或(|)组合,即可生成高效的筛选掩码。

代码示例

1. 创建测试数据

import pandas as pd
import numpy as np

# 生成2020-2023年的每日时序数据
date_range = pd.date_range(start='2020-01-01', end='2023-12-31', freq='D')
df = pd.DataFrame({'value': np.random.randn(len(date_range))}, index=date_range)

2. 构建掩码并操作数据

# 提取索引的月份和日期字段
month = df.index.month
day = df.index.day

# 构建筛选掩码
mask = (
    (month == 4) & (day >= 15) |
    (month.isin([5, 6, 7, 8])) |
    (month == 9) & (day <= 16)
)

# 筛选目标数据
filtered_df = df[mask]

# 为筛选出的行设置值(例如将value字段设为0)
df.loc[mask, 'value'] = 0

性能说明

这种向量化操作依赖Pandas内部的C级优化,避免了Python层面的循环遍历,在处理十万级以上数据时,速度比循环方案快几十倍甚至上百倍。

注意事项

  • 逻辑自动适配所有年份,无需单独处理闰年(4月15日和9月16日在所有年份均存在)
  • 若需调整日期范围,只需修改对应的月份和日期阈值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:50:24