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

如何基于起止月份筛选DataFrame中符合日期区间的行数据

解决方案

步骤1:导入依赖(示例数据初始化可选,方便你直接测试)

import pandas as pd

# 可直接运行的示例数据构造代码
data = {
    'Date': ['2020-05-18', '2020-06-22', '2019-07-11', '2018-03-01', '2021-01-21', '2021-05-05', '2021-09-11'],
    'Group': [1, 1, 1, 1, 2, 2, 2]
}
df = pd.DataFrame(data)

# 你的起止月份参数
Start = '2020-05'
End = '2021-09'

步骤2:转换日期列格式

首先需要把Date列从字符串转为pandas支持的datetime类型,方便后续时间计算。如果你现有DataFrame的Date列已经是datetime格式,可直接跳过这一步。

df['Date'] = pd.to_datetime(df['Date'])

步骤3:按月份区间筛选数据

提供两种常用实现方式,都可以得到你要的结果:

方式1:用月度周期匹配(推荐,逻辑更严谨)

利用pandas的周期类型直接对比月度范围,不需要额外处理字符串:

# 把起止月份字符串转为月度周期对象
start_period = pd.Period(Start, freq='M')
end_period = pd.Period(End, freq='M')

# 筛选日期所属月份在目标区间内的行,between默认包含两端边界
result_df = df[df['Date'].dt.to_period('M').between(start_period, end_period)]

方式2:用年月字符串直接比对

将日期转为年-月格式的字符串后,直接和起止参数做大小比较:

# 提取每个日期对应的年月字符串
df['year_month'] = df['Date'].dt.strftime('%Y-%m')
# 筛选符合区间的行,筛选完可删除临时生成的年月列
result_df = df[(df['year_month'] >= Start) & (df['year_month'] <= End)].drop('year_month', axis=1)

最终输出

打印result_df即可得到预期结果:

DateGroup
2020-05-181
2020-06-221
2021-01-212
2021-05-052
2021-09-112

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:39:04