首页 文章

使用自定义月末频率重新取样

提问于
浏览
0

我正在为月度数据寻找 W-MON (每周,周一结束)的等效规格 .

具体来说,我有一个每日数据的熊猫数据框,我想只收看每月观察,从最近的日期开始,然后每月返回 .

因此,如果今天是2016年6月17日,我的日期指数将是2016年6月17日,2016年5月17日,2016年4月17日......等等 .

现在我只能找到月开始和月末作为df.asfreq()的规格 .

谢谢 .

1 回答

  • 0

    您可以使用 relativedelta 创建相关日期,然后使用 .loc[] 进行选择:

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

    使用每日样本数据:

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

    和一个月结束日期,以显示 relativedelta 如何处理此案例:

    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
    

相关问题