【发布时间】:2017-06-23 01:45:59
【问题描述】:
假设我有一个日期时间索引的数据框,该索引涵盖上一个财政年度和当前财政年度的一天(从 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 - 以编程方式根据最后四个完整季度过滤数据的解决方案?
【问题讨论】:
-
我认为你可以这样做,
df.date >="2016-04-01" & df.date < "2017-03-31" -
抱歉,我不得不调整一下这个问题。我的意思是编程,因为我很想留下一个我不想每次都调整的脚本。
-
您的意思是只考虑 01-01 到 03-31 期间吗? 04-01 至 06-31; 07-01 到 09-31 和 10-01 到 12-31 作为季度,还是您想要根据您的数据改变“季度”?除非您精确定义您的期望(或者“季度”有多长,相信我,可能会有所不同!)这是一个算法问题,而不是 pandas 或 python 问题。
-
@vmg - 感谢您的提问。理想情况下,我想像你说的那样选择。如果有帮助,我实际上使用 df['Quarter'] = pd.PeriodIndex(df['Provision Date'], freq="Q-MAR").strftime("Q%q") 创建了一个文本变量。 (我对 dateoffset 的东西有点迷失了)