Escribir función de agregación personalizada en Pandas

Pandas en python se usa ampliamente para fines de análisis de datos y consta de algunas estructuras de datos finas como Dataframe y Series . Hay varias funciones en pandas que demuestran ser de gran ayuda para un programador, una de ellas es una función agregada. Esta función devuelve un valor único de varios valores tomados como entrada que se agrupan según ciertos criterios. Algunas de las funciones agregadas son promedio, conteo, máximo, entre otras.

Sintaxis: DataFrame.agg(func=Ninguno, eje=0, *args, **kwargs)

Parámetros:

  • eje: {0 o ‘índice’, 1 o ‘columnas’} = 0 o ‘índice’ significa que la función se aplica a cada columna y 1 o ‘columnas’ significa que la función se aplica a cada fila.
  • func: function, str, list o dict = Describe la función que se utilizará para la agregación. Las combinaciones aceptadas son: función, nombre de función de string (str), lista de funciones (lista/dict).
  • *args: Especifica los argumentos posicionales a pasar a la función.
  • **kwargs: Especifica los argumentos de la palabra clave para pasar a la función.

Retorno: esta función puede devolver escalar, serie o marco de datos. El retorno es escalar cuando se llama a Series.agg con una sola función, es Series cuando se llama a Dataframe.agg con una sola función, será Dataframe cuando se llama a Dataframe.agg con varias funciones.

Vamos a crear un marco de datos:

Python3

# import pandas library
import pandas as pd
  
# create a Dataframe
df = pd.DataFrame([[10, 20, 30],
                  [40, 50, 60],
                  [70, 80, 90],
                  [100,110,120]],
                 columns=['Col_A', 'Col_B',
                          'Col_C'])
# show the dataframe
df

Producción:

Ahora, vamos a realizar algunas operaciones:

1. Realización de agregación sobre las filas: esto realiza funciones de agregación sobre las filas del marco de datos. Como puede ver en los ejemplos a continuación, el ejemplo 1 tiene dos palabras clave dentro de la función agregada, sum y min. La suma suma el primer (10,40,70,100), segundo (20,50,80,110) y tercer (30,60,90,120) elemento de cada fila por separado y lo imprime, el min encuentra el número mínimo entre los elementos de filas e imprimirlo. Un proceso similar es con el segundo ejemplo.

Ejemplo 1:

Python3

df.agg(['sum', 'min'])

Producción:

Ejemplo 2:

Python3

df.agg(['sum', 'min', 'max'])

Producción:

2. Realización de agregación por columna: Esto realiza la función de agregación en las columnas, las columnas se seleccionan particularmente como se muestra en los ejemplos. En el primer ejemplo, se seleccionan dos columnas, ‘Col_A’ y ‘Col_B’ y se van a realizar operaciones sobre ellas. Para Col_A se calcula el valor mínimo y el valor sumado y para Col_B se calcula el valor mínimo y máximo. Un proceso similar es con el ejemplo 2.

Ejemplo 1:

Python3

df.agg({'Col_A' : ['sum', 'min'], 
        'Col_B' : ['min', 'max']})

Producción:

Ejemplo 2:

Python3

df.agg({'Col_A' : ['sum', 'min'],
        'Col_B' : ['min', 'max'],
        'Col_C' : ['sum', 'mean']})

Producción:

Nota: Imprimirá NaN si no se realiza una agregación en particular en una columna en particular.

3. Realización de agregación sobre las columnas: Esto realiza la función de agregación sobre las columnas. Como se muestra en el ejemplo 1, la media de los elementos primero (10,20,30), segundo (40,50,60), tercero (70,80,90) y cuarto (100,110,120) de cada columna se calcula por separado y se imprime. 

Ejemplo:

Python3

df.agg("mean", axis = "columns")

Producción:

4 . Función agregada personalizada: a veces se convierte en una necesidad crear nuestra propia función agregada. 

Ejemplo: considere un marco de datos que consiste en la identificación del estudiante (stu_id), el código de la materia (sub_code) y las calificaciones (marcas). 

Python3

# import pandas library
import pandas as pd
   
# Creating DataFrame
df = pd.DataFrame(
    {'stud_id' : [101, 102, 103, 104, 
                  101, 102, 103, 104],
     'sub_code' : ['CSE6001', 'CSE6001', 'CSE6001', 
                   'CSE6001', 'CSE6002', 'CSE6002',
                   'CSE6002', 'CSE6002'],
     'marks' : [77, 86, 55, 90, 
                65, 90, 80, 67]}
)
  
# Printing DataFrame
df

Producción:

Ahora si necesita calcular las notas totales (notas de dos materias) de cada estudiante (stu_id único). Este proceso se puede realizar mediante la función agregada personalizada. Aquí mi función agregada personalizada es ‘total’.

Python3

# Importing reduce for 
# rolling computations
from functools import reduce
  
# define a Custom aggregation 
# function for finding total
def total(series):
      return reduce(lambda x, y: x + y, series)
  
# Grouping the output according to 
# student id and printing the corresponding 
# total marks and to check whether the
# output is correct or not, sum function 
# is also used to print the sum.
df.groupby('stud_id').agg({'marks': ['sum', total]})

Producción:

Como puede ver, ambas columnas tienen los mismos valores de calificaciones totales, por lo que nuestra función agregada calcula correctamente las calificaciones totales en este caso.

Publicación traducida automáticamente

Artículo escrito por nikki2398 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *