已生成年季度列,如何用Python过滤DataFrame过去4个季度数据?
解决方案
首先修正你代码里的小笔误:原代码中用了d['End Date'],应该改为df['End Date'],正确生成Quarter列的代码是:
df['Quarter'] = pd.PeriodIndex(df['End Date'], freq='Q')
接下来可以按以下步骤筛选过去4个季度的数据:
1. 确定参考季度
你可以选择基于当前系统日期自动获取参考季度,或者手动指定目标参考季度:
- 自动获取当前季度:
ref_quarter = pd.Period.now(freq='Q')
- 手动指定参考季度(比如你的例子中的2023Q1):
ref_quarter = pd.Period('2023Q1', freq='Q')
2. 计算筛选范围
根据参考季度,算出需要保留的季度区间:
- 起始季度:参考季度往前推4个季度
- 结束季度:参考季度往前推1个季度
3. 执行筛选
用布尔索引过滤DataFrame:
# 计算上下限 start_quarter = ref_quarter - 4 end_quarter = ref_quarter - 1 # 筛选数据 df_filtered = df[(df['Quarter'] >= start_quarter) & (df['Quarter'] <= end_quarter)]
补充说明
- 因为
Quarter列是Period类型,它支持直接的加减运算和大小比较,逻辑非常直观 - 如果你的
End Date列本身是datetime类型,也可以不提前生成Quarter列,直接基于日期筛选:
ref_quarter = pd.Period.now(freq='Q') start_date = (ref_quarter - 4).start_time end_date = (ref_quarter - 1).end_time df_filtered = df[(df['End Date'] >= start_date) & (df['End Date'] <= end_date)]
内容的提问来源于stack exchange,提问作者zuana
相关产品推荐
相关产品推荐

