2016-11-03 6 views
2

У меня есть df, который может быть представлен ниже столбцом даты и 4 столбцами переменной.фильтрация dataframes по datetimeindex- последний рабочий день каждого месяца

Date   A B C D 
2015-10-31 6 7 3 7 
2015-11-01 1 3 9 4 
2015-11-02 4 5 8 1 
2015-11-03 4 2 5 9 

Я ищу фильтр ФР на последний рабочий день каждого месяца, добавив дополнительный столбец под названием «EndofMonth» и принимая заднюю п-ю строку из каждого месяца:

df['EndOfMonth'] = pd.to_datetime(df['DATE'], format="%Y%m") + MonthEnd(1) 
df.apply(lambda x: x.sort('dt', ascending=True).tail(1)) 

Это давая мне ошибку. Любые идеи о том, как лучше решить эту проблему?

+1

Что такое 'MonthEnd (1)'? –

ответ

2

IIUC

df.resample('M', on='Date').apply(pd.DataFrame.tail, n=2) 

enter image description here


ответ на комментарий

d1 = df.resample('M').apply(pd.DataFrame.tail, n=2) 
d1.index = d1.index.droplevel(0) 
d1 

enter image description here

+0

Я получаю сообщение об ошибке - TypeError: resample() получил неожиданный аргумент ключевого слова 'on'. Может быть, потому, что он читает мои данные col. а не как дата? @piRSquared – spacedinosaur10

+1

'on' - новый параметр для' resample' в pandas 0.19. вы можете сделать 'df.set_index ('Date'). resample ('M'). apply (pd.DataFrame.tail, n = 2)' – piRSquared

+0

@ piRSquared- я сожалею о продолжающихся вопросах, но это создало мульти -индекс (2 даты). Я бы в идеале хотел избавиться от одного из столбцов индекса. Как я могу это сделать? Я знаю, как удалить столбец (df.drop), но я не уверен, как удалить индекс. – spacedinosaur10