Pandas Dataframe datetime slicing con Index vs MultiIndex

Con un solo marco de datos indexado puedo hacer lo siguiente:

df2 = DataFrame(data={'data': [1,2,3]}, 
                index=Index([dt(2016,1,1),
                      dt(2016,1,2),
                      dt(2016,2,1)]))

>>> df2['2016-01 : '2016-01']
                data
    2016-01-01     1
    2016-01-02     2

>>> df2['2016-01-01' : '2016-01-01']
                data
    2016-01-01     1

La división de fecha y hora funciona cuando le das un día completo (es decir, 2016-01-01), y también funciona cuando le das una fecha parcial, como solo el año y el mes (2016-01). Todo esto funciona muy bien, pero cuando introduce un índice múltiple, solo funciona para fechas completas. El corte parcial de fechas ya no parece funcionar

df = DataFrame(data={'data': [1, 2, 3]},
               index=MultiIndex.from_tuples([(dt(2016, 1, 1), 2),
                                             (dt(2016, 1, 1), 3),
                                             (dt(2016, 1, 2), 2)],
                                             names=['date', 'val']))


 >>> df['2016-01-01 : '2016-01-02']
                            data
     date       val     
     2016-01-01 2           1
                3           2
     2016-01-02 2           3

ok, está bien, pero la fecha parcial:

>>> df['2016-01' : '2016-01']
 File "pandas/index.pyx", line 134, in pandas.index.IndexEngine.get_loc      (pandas/index.c:3824)
 File "pandas/index.pyx", line 154, in pandas.index.IndexEngine.get_loc (pandas/index.c:3704)
 File "pandas/hashtable.pyx", line 686, in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12280)
 File "pandas/hashtable.pyx", line 694, in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12231)
  KeyError: '2016-01'

(Acorté el rastreo).

¿Alguna idea de si esto es posible? ¿Es esto un error? ¿Hay alguna manera de hacer lo que quiero hacer sin tener que recurrir a algo como:

df.loc[(df.index.get_level_values('date') >= start_date) &
       (df.index.get_level_values('date') <= end_date)]

¡Cualquier sugerencia, comentario, sugerencia, etc. es lo más apreciado! ¡He intentado muchas otras cosas en vano!

Respuestas a la pregunta(2)

Su respuesta a la pregunta