如何从熊猫的时间序列的最后四个完整季度中选择数据?

时间:2017-06-22 13:32:02

标签: python pandas datetime

说我有一个数据框,其日期时间指数涵盖上一个财政年度和当前财政年度的一天(从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解决方案是什么?

3 个答案:

答案 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")]