en pandas, ¿cómo puedo agrupar por día de la semana () para una columna de fecha y hora?

Me gustaría filtrar los datos del fin de semana y solo mirar los datos para los días de la semana (mon (0) -fri (4)). Soy nuevo en pandas, ¿cuál es la mejor manera de lograr esto en pandas?

import datetime from pandas import * data = read_csv("data.csv") data.my_dt Out[52]: 0 2012-10-01 02:00:39 1 2012-10-01 02:00:38 2 2012-10-01 02:01:05 3 2012-10-01 02:01:07 4 2012-10-01 02:02:03 5 2012-10-01 02:02:09 6 2012-10-01 02:02:03 7 2012-10-01 02:02:35 8 2012-10-01 02:02:33 9 2012-10-01 02:03:01 10 2012-10-01 02:08:53 11 2012-10-01 02:09:04 12 2012-10-01 02:09:09 13 2012-10-01 02:10:20 14 2012-10-01 02:10:45 ... 

Me gustaría hacer algo como:

 weekdays_only = data[data.my_dt.weekday() < 5] 

AttributeError: el objeto ‘numpy.int64’ no tiene atributo ‘día de la semana’

pero esto no funciona, no he entendido bien cómo se accede a los objetos de fecha y hora de columna.

El objective final es organizar jerárquicamente el rango de horas del día de la semana, algo así como:

 monday, 0-6, 7-12, 13-18, 19-23 tuesday, 0-6, 7-12, 13-18, 19-23 

Su llamada a la función “día de la semana” no funciona, ya que funciona en el índice de data.my_dt, que es una matriz int64 (de aquí proviene el mensaje de error)

podría crear una nueva columna en los datos que contienen los días de la semana usando algo como:

 data['weekday'] = data['my_dt'].apply(lambda x: x.weekday()) 

Luego puedes filtrar por días de la semana con:

 weekdays_only = data[data['weekday'] < 5 ] 

espero que esto ayude

Una forma más rápida sería utilizar DatetimeIndex.weekday , así:

 temp = pd.DatetimeIndex(data['my_dt']) data['weekday'] = temp.weekday 

Mucho más rápido, especialmente para un gran número de filas. Para más información, verifique esta respuesta.