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

如何基于用户输入的回溯月数过滤DataFrame指定日期行?

解决按回溯月数筛选DataFrame日期行的问题

核心思路

要实现需求,分两步走:精准计算回溯后的目标日期,将DataFrame日期列标准化后匹配过滤。


1. 正确计算回溯日期

Python内置datetime无法直接处理月份加减(比如跨月、月末日期),需用dateutil.relativedelta工具。先安装依赖:

pip install python-dateutil

示例代码(以2022-08-30回溯3个月为例):

from datetime import datetime
from dateutil.relativedelta import relativedelta

# 基准日期(可替换为业务实际日期,比如当前日期datetime.today())
base_date = datetime(2022, 8, 30)
# 用户输入的回溯月数
months_to_backtrack = 3

# 计算目标日期
target_date = base_date - relativedelta(months=months_to_backtrack)
# 转为date对象(若DataFrame的date列是纯日期类型而非datetime)
target_date = target_date.date()

2. 预处理并过滤DataFrame

确保日期列格式统一,再用布尔索引筛选:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'id': [1, 2, 3],
    'text1': ['a', 'b', 'c'],
    'text2': ['x', 'y', 'z'],
    'date': ['2022-05-30', '2022-05-30', '2022-06-01']
})

# 把字符串日期转为date类型(和目标日期类型统一)
df['date'] = pd.to_datetime(df['date']).dt.date

# 筛选匹配目标日期的行
filtered_result = df[df['date'] == target_date]
print(filtered_result)

输出结果

id text1 text2        date
0   1     a     x  2022-05-30
1   2     b     y  2022-05-30

常见问题排查

  • 若之前用relativetime报错:是库名错误,正确依赖是python-dateutil,导入用from dateutil.relativedelta import relativedelta。
  • 日期匹配失败:检查DataFrame的date列类型与target_date是否一致(比如一个是字符串、一个是date对象,会导致匹配失效)。
  • 月末特殊场景:比如1月31日回溯1个月,relativedelta会自动转为12月31日,无需额外处理边界情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:54:54