Cómo filtrar fechas en el dataframe multiindex

Estoy buscando una manera de filtrar un dataframe multiindex como el siguiente por día de la semana y / o fechas seleccionadas. Digamos que necesito

  • una consulta para select only mondays ;
  • otra consulta en la que quiero select all days except monday and friday ;
  • una tercera consulta para seleccionar los datos presentes en una lista de entrada de fechas, como select all dates in ['2015-05-14', '2015-05-21', '2015-05-22'] ;
  • y finalmente, una consulta que combina una selección basada en el día de la semana y una lista de fechas, como select all dates in ['2015-05-14', '2015-05-21', '2015-05-22'] and thursdays .

¿Cuál es la manera de hacerlo?

  Col1 Col2 Col3 Col4 Date Two 2015-05-14 10 81.370003 6.11282 39.753 44.950001 11 80.419998 6.03380 39.289 44.750000 C3 80.879997 6.00746 41.249 44.360001 2015-05-19 3 80.629997 6.10465 41.047 40.980000 S9 80.550003 6.14370 41.636 42.790001 2015-05-21 19 80.480003 6.16096 42.137 43.680000 2015-05-22 C3 80.540001 6.13916 42.179 43.490002 

Si tiene la Date como tipo de datetime y datetime , puede usar dayofweek para obtener el día de la semana y realizar una consulta basada en él.

Selecciona solo los lunes:

 df[df.index.get_level_values('Date').dayofweek == 0] 

Seleccione días excepto lunes y viernes:

 import numpy as np df[np.in1d(df.index.get_level_values('Date').dayofweek, [1,2,3,5,6])] # Col1 Col2 Col3 Col4 # Date Two #2015-05-14 10 81.370003 6.11282 39.753 44.950001 # 11 80.419998 6.03380 39.289 44.750000 # C3 80.879997 6.00746 41.249 44.360001 #2015-05-19 3 80.629997 6.10465 41.047 40.980000 # S9 80.550003 6.14370 41.636 42.790001 #2015-05-21 19 80.480003 6.16096 42.137 43.680000