如何基于起止月份筛选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即可得到预期结果:
| Date | Group |
|---|---|
| 2020-05-18 | 1 |
| 2020-06-22 | 1 |
| 2021-01-21 | 2 |
| 2021-05-05 | 2 |
| 2021-09-11 | 2 |
内容的提问来源于stack exchange,提问作者tj judge
相关产品推荐
相关产品推荐

