Iterando sobre grupos en un dataframe

El problema que tengo es que quiero agrupar el dataframe y luego usar funciones para manipular los datos después de que se hayan agrupado. Por ejemplo, quiero agrupar los datos por Fecha y luego iterar a través de cada fila en los grupos de fechas para analizar una función.

El problema es que Groupby parece crear una tupla de la clave y luego una cadena masiva que consta de todas las filas de los datos, lo que hace que la iteración de cada fila sea imposible.

Cuando aplica groupby en un dataframe, no obtiene filas, obtiene grupos de marcos de datos. Por ejemplo, considere:

 df ID Date Days Volume/Day 0 111 2016-01-01 20 50 1 111 2016-02-01 25 40 2 111 2016-03-01 31 35 3 111 2016-04-01 30 30 4 111 2016-05-01 31 25 5 111 2016-06-01 30 20 6 111 2016-07-01 31 20 7 111 2016-08-01 31 15 8 111 2016-09-01 29 15 9 111 2016-10-01 31 10 10 111 2016-11-01 29 5 11 111 2016-12-01 27 0 0 112 2016-01-01 31 55 1 112 2016-01-02 26 45 2 112 2016-01-03 31 40 3 112 2016-01-04 30 35 4 112 2016-01-05 31 30 5 112 2016-01-06 30 25 6 112 2016-01-07 31 25 7 112 2016-01-08 31 20 8 112 2016-01-09 30 20 9 112 2016-01-10 31 15 10 112 2016-01-11 29 10 11 112 2016-01-12 31 0 for i, g in df.groupby('ID'): print(g, '\n') ID Date Days Volume/Day 0 111 2016-01-01 20 50 1 111 2016-02-01 25 40 2 111 2016-03-01 31 35 3 111 2016-04-01 30 30 4 111 2016-05-01 31 25 5 111 2016-06-01 30 20 6 111 2016-07-01 31 20 7 111 2016-08-01 31 15 8 111 2016-09-01 29 15 9 111 2016-10-01 31 10 10 111 2016-11-01 29 5 11 111 2016-12-01 27 0 ID Date Days Volume/Day 0 112 2016-01-01 31 55 1 112 2016-01-02 26 45 2 112 2016-01-03 31 40 3 112 2016-01-04 30 35 4 112 2016-01-05 31 30 5 112 2016-01-06 30 25 6 112 2016-01-07 31 25 7 112 2016-01-08 31 20 8 112 2016-01-09 30 20 9 112 2016-01-10 31 15 10 112 2016-01-11 29 10 11 112 2016-01-12 31 0 

Para su caso, probablemente debería buscar en dfGroupby.apply , si desea aplicar alguna función en sus grupos, dfGroupby.transform para producir un dataframe indexado (consulte la explicación en los documentos) o dfGroupby.agg , si desea obtener resultados agregados. .

Harías algo como:

 r = df.groupby('Date').apply(your_function) 

Definirías tu función como:

 def your_function(df): ... # operation on df return result 

Si tiene problemas con la implementación, abra una nueva pregunta, publique sus datos y su código, y cualquier error / rastreo asociado. Feliz codificacion