Вы можете создать соответствующие даты с помощью 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
насчет привязывая их к началу месяца, затем добавить timedelta в соответствующие дни? (Не совсем уверен, что будет работать с месяцами, которые не имеют необходимого количества дней, хотя ...) –
Каков ваш желаемый результат, когда сегодня 31 января? Очевидно, что у вас не может быть 31 февраля – FLab