2015-02-16 4 views
4

Учитывая ФР такого рода, где мы имеем DateTime индекс:Как выбрать наблюдения df с использованием атрибутов индекса даты и времени в Pandas?

DateTime    A       
2007-08-07 18:00:00 1 
2007-08-08 00:00:00 2 
2007-08-08 06:00:00 3 
2007-08-08 12:00:00 4 
2007-08-08 18:00:00 5 
2007-11-02 18:00:00 6 
2007-11-03 00:00:00 7 
2007-11-03 06:00:00 8 
2007-11-03 12:00:00 9 
2007-11-03 18:00:00 10 

Я хотел бы подмножество наблюдений с использованием атрибутов индекса, например:

  • Первого рабочего день месяца
  • Последний рабочий день месяца
  • Первая пятница месяца «WOM-1FRI»
  • Третья пятница месяца «WOM-3FRI»

Я специально интересно знать, если это может быть сделано с помощью что-то вроде:

df.loc[(df['A'] < 5) & (df.index == 'WOM-3FRI'), 'Signal'] = 1 

Благодарности

+0

Существует экспериментальная поддержка от pandas v.0.15.2 для [пользовательских рабочих дней] (http://pandas.pydata.org/pandas-docs/stable/timeseries.html#custom-business-days-experimental) и связанные операции с 'DateTimeIndex' – logc

ответ

0

Вы можете попробовать ...

# FIRST DAY OF MONTH 
df.loc[df[1:][df.index.month[:-1]!=df.index.month[1:]].index] 

# LAST DAY OF MONTH 
df.loc[df[:-1][df.index.month[:-1]!=df.index.month[1:]].index] 

# 1st Friday 
fr1 = df.groupby(df.index.year*100+df.index.month).apply(lambda x: x[(x.index.week==1)*(x.index.weekday==4)]) 

# 3rd Friday 
fr3 = df.groupby(df.index.year*100+df.index.month).apply(lambda x: x[(x.index.week==3)*(x.index.weekday==4)]) 

Если вы хотите удалить дополнительные уровни в индексе fr1 и fr3:

fr1.index=fr1.index.droplevel(0) 
fr3.index=fr3.index.droplevel(0) 
Смежные вопросы