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

Pandas如何筛选指定日期往前2天周期的DataFrame行数据

Pandas按日期索引筛选指定时间窗口行实现方案

首先做前置准备:必须先将DataFrame的date索引转换为pandas原生datetime类型,否则时间计算和切片会出错,转换代码如下:

import pandas as pd
# 转换索引为datetime类型
df.index = pd.to_datetime(df.index)

方案1:严格按自然日时间范围筛选(匹配「往前2天」的字面需求)

核心逻辑是计算时间窗口的起止边界,利用pandas datetime索引支持的时间范围切片直接筛选,会返回所有落在时间区间内的行:

# 指定选中日期,统一转成datetime类型
selected = '2021-08-22'
selected_date = pd.to_datetime(selected)
# 计算窗口起始点:选中日期往前推2天
start_date = selected_date - pd.Timedelta(days=2)
# 切片筛选,datetime索引的切片是闭区间,包含首尾日期
res_df = df.loc[start_date:selected_date]

注意:如果你的数据是不连续的时间序列(比如样例里每月才一条数据),该方法只会返回时间落在[start_date, selected_date]区间内的行。如果你样例里的2021-07-22是笔误、实际应为2021-08-20,上述代码运行后就会返回你给出的期望结果。


方案2:取选中日期及之前最近N条记录(匹配你给出的样例输出)

如果你的实际需求不是按自然日计算窗口,而是要取包含选中日期在内的最近N条记录(比如样例里选2021-08-22取最近2条,对应7月22、8月22两行),可以用索引位置定位后切片:

selected = '2021-08-22'
selected_date = pd.to_datetime(selected)
# 定义要取的记录条数
n = 2
# 先截断到选中日期为止的所有行,再取最后n行
res_df = df.loc[:selected_date].tail(n)

该代码在你给出的样例数据上运行后,输出结果和你的期望完全一致:

A  B  C
date               
2021-07-22  5  4  6
2021-08-22  6  5  7

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:24:27