2016-06-17 9 views
0

私はW-MON(毎週、月曜日まで)の毎月のデータと同等の仕様を探しています。月末のカスタム周波数を使ったリサンプル

具体的には、私は日々のデータのpandasデータフレームを持っています。最新の日付から始めて、毎月毎月の観測を取るだけです。今日は17/06/2016であれば

だから、私の日付インデックスは、今私ができるだけで17/06/2016、17/05/2016、17/04/2016 ...など

だろうdf.asfreq()の仕様としてmonth-startとmonth-endを見つけてください。

ありがとうございました。

+0

何適切な日数のはtimedeltaを追加し、その後、月の始めにそれらを固定するでしょうか? (しかし、必要な日数がない月にはうまくいくとは限りません...) –

+1

今日が31 Janのときに、あなたの望む出力は何ですか? 明らかに、あなたは2月31日を持つことができません – FLab

答えて

0

あなたはrelativedeltaを使用して、関連する日付を作成し、.loc[]を使用して選択することができます。

:どのように relativedelta扱いこのケースを示すために、

stock_data = DataReader('FB', 'yahoo', datetime(2013, 1, 1), datetime.today()).resample('D').fillna(method='ffill')['Open'] 

と月末日:毎日サンプルデータを使用して

from datetime import datetime 
from dateutil.relativedelta import relativedelta 
from pandas_datareader.data import DataReader 

today = date(2016, 1, 31) 

日付のシーケンスを作成します。

n_months = 30 
dates = [today - relativedelta(years=m // 12, months=m % 12) for m in range(n_months)] 

取得する:

stock_data.loc[dates] 

Date 
2016-01-31 108.989998 
2015-12-31 106.000000 
2015-11-30 105.839996 
2015-10-31 104.510002 
2015-09-30  88.440002 
2015-08-31  90.599998 
2015-07-31  94.949997 
2015-06-30  86.599998 
2015-05-31  79.949997 
2015-04-30  80.010002 
2015-03-31  82.900002 
2015-02-28  80.680000 
2015-01-31  78.000000 
2014-12-31  79.540001 
2014-11-30  77.669998 
2014-10-31  74.930000 
2014-09-30  79.349998 
2014-08-31  74.300003 
2014-07-31  74.000000 
2014-06-30  67.459999 
2014-05-31  63.950001 
2014-04-30  57.580002 
2014-03-31  60.779999 
2014-02-28  69.470001 
2014-01-31  60.470001 
2013-12-31  54.119999 
2013-11-30  46.750000 
2013-10-31  47.160000 
2013-09-30  50.139999 
2013-08-31  42.020000 
Name: Open, dtype: float64