Допустим, у вас есть такой фрейм данных с двумя столбцами,
dates = pd.date_range('01/01/2016', '12/31/2017')
df = pd.DataFrame({'date':dates,'adjclose':np.random.randint(100,200, len(dates))})
Вы можете создать экземпляр смещений BMonthEnd, чтобы получить даты с частотой MonthEnd и срезом фрейма данных
df.loc[df.date.isin(df.date + pd.offsets.BMonthEnd(1))]
adjclose date
28 128 2016-01-29
59 193 2016-02-29
90 167 2016-03-31
119 185 2016-04-29
151 133 2016-05-31
181 184 2016-06-30