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

如何在Pandas中按多组日期间隔筛选时间序列DataFrame行

Pandas 多组时间区间批量筛选方案

以下两种方案可实现需求,可根据区间数量选择适配的实现方式:

前置预处理

首先统一时间列数据类型,避免格式不匹配导致筛选失效:

import pandas as pd

# 转换主数据索引为datetime类型(如已为datetime可跳过)
df_power.index = pd.to_datetime(df_power.index)
# 转换区间表的起止时间列为datetime类型
df_intervals['date start'] = pd.to_datetime(df_intervals['date start'])
df_intervals['date end'] = pd.to_datetime(df_intervals['date end'])

方案1:循环生成条件(适合区间量较少的场景)

逻辑简单易懂,区间量在1000以内时性能足够:

# 初始化全为False的掩码
mask = pd.Series(False, index=df_power.index)
# 遍历每个区间,合并符合条件的行
for _, interval in df_intervals.iterrows():
    mask |= df_power.index.to_series().between(interval['date start'], interval['date end'])

# 筛选得到结果
result = df_power[mask]

方案2:区间索引向量化匹配(适合区间量较大的场景)

用pandas原生区间索引实现向量化判断,区间过万也能保持高性能:

# 构建闭区间索引,同时匹配起止时间端点
interval_idx = pd.IntervalIndex.from_arrays(
    df_intervals['date start'], 
    df_intervals['date end'], 
    closed='both'
)
# 判断每个时间点是否落在任意区间内
mask = interval_idx.get_indexer(df_power.index) >= 0

# 筛选得到结果
result = df_power[mask]

注意:如果时间数据带时区,需要保证所有时间列的时区一致,避免出现匹配错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:24:05