Search

Sin Pandas y a lo loco!

Para terminar con la serie Groupby, esta vez vamos a agrupar unos datos por varias columnas y además vamos a obtener la suma de un campo y la cuenta de otro.

Como siempre, los datos aquí.

La tabla contiene las mismas columnas que en el post anterior:

  • ZONA: Zona geográfica donde está situada la planta correspondiente.
  • PLANTA: Nombre de la planta.
  • TIPO: Clase de climatización.
  • EQUIPO: Código único del equipo.
  • KW_FRIO: Capacidad de frío del equipo en kW.

Con Pandas:

Si no utilizamos Pandas:

Cargamos los datos del archivo csv. El resultado nos da una lista de diccionarios, donde, para cada diccionario, las claves serán los nombres de las columnas, y los valores , el valor de dicha columna.

Para este ejercicio he creado la clase myGroupBy:

Al crear una instancia de la clase, tendremos que pasarle estos argumentos:

  • data: Los datos que hemos obtenido del csv y que hemos pasado a la lista de diccionarios.
  • groupby_fields: Una lista en la que hay que colocar los campos por los que queremos agrupar. En este caso quiero agrupar por zona, planta y tipo, así que la lista sería [‘ZONA,’PLANTA’,TIPO’].
  • agg_fields:Una lista con los campo a agregar. En este caso [‘EQUIPO’, ‘KW_FRIO’].
  • aggr_list: Una lista con las funciones de agregación. El orden tiene que corresponder con el campo a agregar. En este caso queremos calcular la cuenta de los equipos y la suma de los kW de frío., así que le pasaríamos [‘count’, ‘sum’].

La función aggregator crea un diccionario con las grupaciones de datos. En este casso, las claves tendrán una pinta así: SUR|TARIFA|CONFORT y su valor será una lista con todos los datos que correspondan. Luego, recorriendo el diccionario devuelto por aggregator, podemos sumar o contar los elementos de dicha lista.

Pues vamos allá.

Definimos los argumentos que vamos a necesitar:

Creamos una instancia que llamaré frioGroupBy:

que tiene esta pinta:

Ahora llamamos al método groupby_agg de la clase para obtener los datos agrupados. Los colocaremos en una nueva variable que llamaré frioGroupedData.

Comprobamos el resultado:

Como véis, el resultado es el mismo.

Puedes descargarte el código de mi 

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.