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

如何用IntervalIndex或Pandas内置工具批量按15天块过滤带DatetimeIndex的DataFrame?

按15天时间块过滤Pandas DataFrame的优化方案

方法一:用pd.cut划分区间并分组处理

如果你需要把整个时间范围拆成连续不重叠的15天块,对每个块的DataFrame做操作,pd.cut是最直接的实现方式:

import pandas as pd

# 假设df是带DatetimeIndex的目标DataFrame
start_date = df.index.min()  # 自动取数据起始时间
end_date = df.index.max()    # 自动取数据结束时间

# 生成15天间隔的时间分界点
time_bins = pd.date_range(start=start_date, end=end_date, freq='15D')
# 给每条数据打上所属的15天区间标签
df['time_block'] = pd.cut(df.index, bins=time_bins, closed='left')

# 遍历每个15天块进行处理
for block, block_df in df.groupby('time_block'):
    # 此处可替换为你的业务操作,比如保存、计算指标等
    print(f"当前时间块: {block}")
    print(block_df.head())

如果只需筛选某一个特定15天块,直接用区间匹配即可:

# 筛选第一个15天块
target_interval = pd.Interval(time_bins[0], time_bins[1], closed='left')
filtered_df = df[df['time_block'] == target_interval]

方法二:用pd.interval_range生成区间并匹配索引

如果你想直接用pd.interval_range,可以通过索引匹配实现过滤:

# 生成15天间隔的IntervalIndex
intervals = pd.interval_range(start=start_date, end=end_date, freq='15D', closed='left')

# 找到每条数据对应的区间位置
interval_pos = pd.IntervalIndex(intervals).get_indexer(df.index)

# 例如筛选第2个时间块(索引从0开始计数)
filtered_df = df[interval_pos == 1]

方法三:滑动式15天窗口过滤(适用于重叠场景)

如果需要的是滑动的15天窗口(而非固定起始的非重叠块),可以用rolling时间窗口实现:

# 创建15天滑动窗口对象
rolling_window = df.rolling('15D')
# 示例:计算每个窗口的均值
rolling_mean = rolling_window.mean()

关键注意点

  • 闭区间设置:手动切片start:end是左闭右开逻辑,所以在使用pd.cut或interval_range时,记得设置closed='left',和手动操作行为保持一致。
  • 自动适配时间范围:用df.index.min()和df.index.max()可以避免手动输入起止时间,适配任意长度的时间序列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:28:06