Cómo iterar sobre el dataframe multiindex de pandas usando el índice

Tengo un df de dataframe que se parece a esto. Fecha y hora son 2 índices multinivel.

observation1 observation2 date Time 2012-11-02 9:15:00 79.373668 224 9:16:00 130.841316 477 2012-11-03 9:15:00 45.312814 835 9:16:00 123.776946 623 9:17:00 153.76646 624 9:18:00 463.276946 626 9:19:00 663.176934 622 9:20:00 763.77333 621 2012-11-04 9:15:00 115.449437 122 9:16:00 123.776946 555 9:17:00 153.76646 344 9:18:00 463.276946 212 

Quiero tener algún proceso complejo sobre el bloque de datos diario.

El código de Psuedo se vería como

  for count in df(level 0 index) : new_df = get only chunk for count complex_process(new_df) 

Entonces, en primer lugar, no pude encontrar una manera de acceder solo a los bloques para una fecha

 2012-11-03 9:15:00 45.312814 835 9:16:00 123.776946 623 9:17:00 153.76646 624 9:18:00 463.276946 626 9:19:00 663.176934 622 9:20:00 763.77333 621 

y luego enviarlo para su procesamiento. Estoy haciendo esto en for loop, ya que no estoy seguro de si hay alguna forma de hacerlo sin mencionar el valor exacto de la columna de nivel 0. Hice una búsqueda básica y pude obtener df.index.get_level_values ​​(0), pero me devuelve todos los valores y eso hace que el ciclo se ejecute varias veces durante un día. Quiero crear un dataframe por día y enviarlo para su procesamiento.

Una forma fácil sería agrupar por el primer nivel del índice: la iteración sobre el objeto groupby devolverá las claves de grupo y un subttwig que contiene cada grupo.

 In [136]: for date, new_df in df.groupby(level=0): ...: print(new_df) ...: observation1 observation2 date Time 2012-11-02 9:15:00 79.373668 224 9:16:00 130.841316 477 observation1 observation2 date Time 2012-11-03 9:15:00 45.312814 835 9:16:00 123.776946 623 9:17:00 153.766460 624 9:18:00 463.276946 626 9:19:00 663.176934 622 9:20:00 763.773330 621 observation1 observation2 date Time 2012-11-04 9:15:00 115.449437 122 9:16:00 123.776946 555 9:17:00 153.766460 344 9:18:00 463.276946 212 

Que hay de esto

 for idate in df.index.get_level_values('date'): complex_process(df.ix[idate], idate) 

Etiquetando la respuesta de @psorenson, podemos obtener índices de nivel único y sus segmentos de dataframe relacionados sin el número de la siguiente manera:

 for date in df.index.get_level_values('date').unique(): print(df.loc[date])