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

如何在Pandas中筛选以FIX_DATE为终点的三月时间窗口数据?

解决方案

步骤1:转换日期列类型

首先需要将DATE和FIX_DATE列转换为Pandas的日期类型,方便后续月份差的计算:

import pandas as pd

# 转换字符串日期为datetime类型
df['DATE'] = pd.to_datetime(df['DATE'])
df['FIX_DATE'] = pd.to_datetime(df['FIX_DATE'])

步骤2:计算月份差并筛选目标记录

按ID分组后,计算每条记录的DATE与对应FIX_DATE的月份间隔,筛选出间隔在0到2之间的记录(包含FIX_DATE当月,以及往前推的两个月,正好组成三个月的周期):

方法一:用周期对象计算月份差

# 将日期转为月份周期,直接计算差值
df['month_diff'] = df['FIX_DATE'].dt.to_period('M') - df['DATE'].dt.to_period('M')
# 筛选差值为0、1、2的记录,最后删除临时列
result = df[df['month_diff'].isin([0, 1, 2])].drop('month_diff', axis=1)

方法二:用年月数值计算差值

如果更习惯数值运算,可以将年月转换为数字(比如2023-05转为2023*12+5=24281),再计算差值:

# 生成年月的数值表示
df['date_num'] = df['DATE'].dt.year * 12 + df['DATE'].dt.month
df['fix_date_num'] = df['FIX_DATE'].dt.year * 12 + df['FIX_DATE'].dt.month
# 计算差值并筛选符合条件的记录
df['month_diff'] = df['fix_date_num'] - df['date_num']
result = df[(df['month_diff'] >= 0) & (df['month_diff'] <= 2)].drop(['date_num', 'fix_date_num', 'month_diff'], axis=1)

验证结果

运行代码后,result将得到预期的筛选结果:

ID       DATE   FIX_DATE
0  01 2023-03-01 2023-05-01
1  01 2023-04-01 2023-05-01
2  01 2023-05-01 2023-05-01
3  02 2023-02-01 2023-04-01
4  02 2023-03-01 2023-04-01
5  02 2023-04-01 2023-04-01

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:40:17