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
相关产品推荐
相关产品推荐

