说我有一个数据框,其日期时间指数涵盖上一个财政年度和当前财政年度的一天(从4月1日开始):
Units
date
2016-01-01 8734
2016-06-30 6120
2016-09-30 7346
2016-12-31 5925
2016-03-31 7542
2016-06-30 9916
2016-09-30 9547
2016-12-31 8063
2017-01-01 7000
2017-03-31 5672
2017-04-01 7856
我希望能够选择最后四个季度的数据 - 在这种情况下忽略第一行和最后一行。
我知道我可以用切片来做到这一点,因此:
df["2016-04-01":"2017-03-31"]
根据最后四个完整季度以编程方式过滤数据的最优雅 - pythonic解决方案是什么?
答案 0 :(得分:2)
您应首先定义您的宿舍。您可以使用pd.period_range
使用正确的频率:
例如:
quarters = pd.period_range('2016Q1', '2017Q1', freq='Q-MAR')
这会为您提供一个PeriodIndex,您可以使用asfreq
更改频率以获得所需的日期:
quarters.asfreq('D', 'E')
这会为您提供可用于切割索引的PeriodIndex。
以下是documentation中的更多示例。
答案 1 :(得分:1)
pandas.DatetimeIndex.quarter也可能有用。
然后您可以使用groupby轻松汇总。
答案 2 :(得分:0)
使用Alex指向Pandas中DateOffset功能的指针,我找到了一个部分解决方案,以及datetime模块:
import datetime
from pandas.tseries.offsets import *
now = datetime.datetime.now()
start_year = (now - BQuarterEnd(n=1) - (12 * MonthBegin())).to_datetime()
end_year = (now - BQuarterEnd(n=1) ).to_datetime()
df[start_year.strftime("%Y-%m-%d") : end_year.strftime("%Y-%m-%d")]