2017-06-22 48 views
0

說我得到了與覆蓋在當前財政年度的最後一個財政年度,有一天一個日期索引數據幀(從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"] 

什麼是最優雅 - Python的 - 解決方案根據最後四個完整的編程季度對數據進行篩選?

+0

我想你可以這樣做,'df.date> =「2016-04-01」&df.date <「2017-03-31」' – mtkilic

+0

對不起,我不得不調整這個問題。我的意思是編程方式,因爲我非常想留下腳本,我不想每次調整。 – elksie5000

+0

您的意思是隻考慮01-01至03-31的時間段; 04-01至06-31; 07-01至09-31和10-01至12-31作爲宿舍,還是根據你的數據,你想要改變'宿舍'?除非你精確地定義你期望的東西(或者'四分之一'是多久,相信我,可以改變!)這是一個算法問題,而不是熊貓或python問題。 – vmg

回答

2

你應該先定義你的宿舍。您可以使用pd.period_range爲用正確的頻率: 例如:

quarters = pd.period_range('2016Q1', '2017Q1', freq='Q-MAR') 

這會給你一個PeriodIndex上,你可以改變頻率來得到你想要的日期與asfreq

quarters.asfreq('D', 'E') 

這會給你PeriodIndex,你可以使用切片索引。

以下是documentation中的更多示例。

+0

感謝您的幫助和指向DateOffset的東西。我已經發布了一個基於它的解決方案。 – elksie5000

0

使用Alex的指針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")] 
相關問題