Grupo PandasPor

Groupby es un concepto bastante simple. Podemos crear una agrupación de categorías y aplicar una función a las categorías. Es un concepto simple, pero es una técnica extremadamente valiosa que se usa ampliamente en la ciencia de datos. En los proyectos reales de ciencia de datos, tendrá que lidiar con grandes cantidades de datos y probar cosas una y otra vez, por lo que, para mayor eficiencia, utilizamos el concepto Groupby. El concepto de agrupación es realmente importante porque su capacidad para agregar datos de manera eficiente, tanto en el rendimiento como en la cantidad de código, es magnífica. Groupby se refiere principalmente a un proceso que involucra uno o más de los siguientes pasos: 
 

  • División: es un proceso en el que dividimos los datos en grupos aplicando algunas condiciones en los conjuntos de datos.
  • Aplicar: Es un proceso en el que aplicamos una función a cada grupo de forma independiente
  • Combinar: es un proceso en el que combinamos diferentes conjuntos de datos después de aplicar groupby y los resultados en una estructura de datos.

La siguiente imagen ayudará a comprender un proceso involucrado en el concepto Groupby. 
1. Agrupe los valores únicos de la columna Equipo 
 

2. Ahora hay un cubo para cada grupo. 
 

3. Mezcle los otros datos en los cubos 
 

4. Aplicar una función en la columna de peso de cada balde. 
 

División de datos en grupos

La división es un proceso en el que dividimos los datos en un grupo aplicando algunas condiciones en los conjuntos de datos. Para dividir los datos, aplicamos ciertas condiciones en los conjuntos de datos. Para dividir los datos, usamos la función groupby(), esta función se usa para dividir los datos en grupos según algunos criterios. Los objetos de Pandas se pueden dividir en cualquiera de sus ejes. La definición abstracta de agrupación es proporcionar una asignación de etiquetas a nombres de grupos. Los conjuntos de datos de Pandas se pueden dividir en cualquiera de sus objetos. Hay varias formas de dividir datos como: 
 

  • obj.groupby(clave)
  • obj.groupby(clave, eje=1)
  • obj.groupby([clave1, clave2])

Nota: En esto nos referimos a los objetos de agrupación como las claves. 
Agrupación de datos con una clave: 
para agrupar datos con una clave, pasamos solo una clave como argumento en la función groupby. 
 

Python3

# importing pandas module
import pandas as pd
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA']}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Ahora agrupamos un dato de Nombre usando la función groupby(). 
 

Python3

# using groupby function
# with one key
 
df.groupby('Name')
print(df.groupby('Name').groups)

Producción : 
 

  
Ahora imprimimos las primeras entradas en todos los grupos formados. 
 

Python3

# applying groupby() function to
# group the data on Name value.
gk = df.groupby('Name')
   
# Let's print the first entries
# in all the groups formed.
gk.first()

Producción : 
 

  
Agrupación de datos con varias claves: 
para agrupar datos con varias claves, pasamos varias claves en la función groupby. 
 

Python3

# importing pandas module
import pandas as pd
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA']}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Ahora agrupamos los datos de «Nombre» y «Calificación» usando varias teclas en la función groupby. 
 

Python3

# Using multiple keys in
# groupby() function
df.groupby(['Name', 'Qualification'])
 
print(df.groupby(['Name', 'Qualification']).groups)

Producción : 
 

  
Agrupación de datos por claves de clasificación: 
las claves de grupo se ordenan de forma predeterminada mediante la operación groupby. El usuario puede pasar sort=False para posibles aceleraciones. 
 

Python3

# importing pandas module
import pandas as pd
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32], }
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Ahora aplicamos groupby() sin ordenar 
 

Python3

# using groupby function
# without using sort
 
df.groupby(['Name']).sum()

Producción : 
 

Ahora aplicamos groupby() usando sort para lograr posibles aceleraciones 
 

Python3

# using groupby function
# with sort
 
df.groupby(['Name'], sort = False).sum()

Producción : 
 

  
Agrupación de datos con atributos de objeto: el atributo 
de grupos es como un diccionario cuyas claves son los grupos únicos calculados y los valores correspondientes son las etiquetas de los ejes que pertenecen a cada grupo. 
 

Python3

# importing pandas module
import pandas as pd
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA']}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Ahora agrupamos datos como lo hacemos en un diccionario usando claves. 
 

Python3

# using keys for grouping
# data
 
df.groupby('Name').groups

Producción : 
 

  
 

Iterando a través de grupos

Para iterar un elemento de grupos, podemos iterar a través del objeto similar a itertools.obj. 
 

Python3

# importing pandas module
import pandas as pd
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA']}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Ahora iteramos un elemento de grupo de manera similar a como lo hacemos en itertools.obj. 
 

Python3

# iterating an element
# of group
 
grp = df.groupby('Name')
for name, group in grp:
    print(name)
    print(group)
    print()

Producción : 
 

Ahora iteramos un elemento de grupo que contiene varias claves. 
 

Python3

# iterating an element
# of group containing
# multiple keys
 
grp = df.groupby(['Name', 'Qualification'])
for name, group in grp:
    print(name)
    print(group)
    print()

Salida: 
como se muestra en la salida, el nombre del grupo será tupla 
 

  
 

Selección de un grupo

Para seleccionar un grupo, podemos seleccionar el grupo usando GroupBy.get_group(). Podemos seleccionar un grupo aplicando una función GroupBy.get_group esta función selecciona un solo grupo. 
 

Python3

# importing pandas module
import pandas as pd
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA']}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Ahora seleccionamos un solo grupo usando Groupby.get_group. 
 

Python3

# selecting a single group
 
grp = df.groupby('Name')
grp.get_group('Jai')

Producción : 
 

Ahora seleccionamos un objeto agrupado en varias columnas. 
 

Python3

# selecting object grouped
# on multiple columns
 
grp = df.groupby(['Name', 'Qualification'])
grp.get_group(('Jai', 'Msc'))

Producción : 
 

Aplicando función al grupo

Después de dividir un dato en un grupo, aplicamos una función a cada grupo para que realicemos alguna operación que son: 
 

  • Agregación: es un proceso en el que calculamos una estadística de resumen (o estadísticas) sobre cada grupo. Por ejemplo, calcular sumas o medias de grupos
  • Transformación: es un proceso en el que realizamos algunos cálculos específicos del grupo y devolvemos un índice similar. Por ejemplo, llenar NA dentro de grupos con un valor derivado de cada grupo
  • Filtración: Es un proceso en el que descartamos algunos grupos, según un cómputo por grupos que evalúa Verdadero o Falso. Por ejemplo, filtrar datos según la suma o la media del grupo

  
Agregación: 
la agregación es un proceso en el que calculamos una estadística de resumen sobre cada grupo. La función agregada devuelve un único valor agregado para cada grupo. Después de dividir los datos en grupos usando la función groupby, se pueden realizar varias operaciones de agregación en los datos agrupados. 
Código #1: Uso de la agregación a través del método agregado 
 

Python3

# importing pandas module
import pandas as pd
 
# importing numpy as np
import numpy as np
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA']}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Ahora realizamos la agregación usando el método agregado. 
 

Python3

# performing aggregation using
# aggregate method
 
grp1 = df.groupby('Name')
 
grp1.aggregate(np.sum)

Producción : 
 

Ahora realizamos la agregación en un grupo que contiene varias claves 
 

Python3

# performing aggregation on
# group containing multiple
# keys
grp1 = df.groupby(['Name', 'Qualification'])
 
grp1.aggregate(np.sum)

Producción : 
 

  
Aplicar varias funciones a la vez: 
podemos aplicar varias funciones a la vez pasando una lista o un diccionario de funciones para hacer la agregación, generando un DataFrame. 
 

Python3

# importing pandas module
import pandas as pd
 
# importing numpy as np
import numpy as np
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA']}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Ahora aplicamos funciones múltiples pasando una lista de funciones. 
 

Python3

# applying a function by passing
# a list of functions
 
grp = df.groupby('Name')
 
grp['Age'].agg([np.sum, np.mean, np.std])

Producción : 
 

  
Aplicar diferentes funciones a las columnas de DataFrame: 
para aplicar una agregación diferente a las columnas de un DataFrame, podemos pasar un diccionario para agregar. 
 

Python3

# importing pandas module
import pandas as pd
 
# importing numpy as np
import numpy as np
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA'],
        'Score': [23, 34, 35, 45, 47, 50, 52, 53]}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Ahora aplicamos una agregación diferente a las columnas de un marco de datos. 
 

Python3

# using different aggregation
# function by passing dictionary
# to aggregate
grp = df.groupby('Name')
 
grp.agg({'Age' : 'sum', 'Score' : 'std'})

Producción : 
 

Transformación: 
la transformación es un proceso en el que realizamos algunos cálculos específicos del grupo y devolvemos un índice similar. El método de transformación devuelve un objeto que está indexado del mismo (mismo tamaño) que el que se está agrupando. La función de transformación debe: 
 

  • Devolver un resultado que sea del mismo tamaño que el fragmento del grupo
  • Operar columna por columna en el fragmento de grupo
  • No realizar operaciones in situ en el fragmento de grupo.

Python3

# importing pandas module
import pandas as pd
 
# importing numpy as np
import numpy as np
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA'],
        'Score': [23, 34, 35, 45, 47, 50, 52, 53]}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Ahora realizamos algunos cálculos específicos del grupo y devolvemos un índice similar. 
 

Python3

# using transform function
grp = df.groupby('Name')
sc = lambda x: (x - x.mean()) / x.std()*10
grp.transform(sc)

Producción : 
 

Filtración: 
La filtración es un proceso en el que descartamos algunos grupos, de acuerdo con un cálculo por grupos que evalúa Verdadero o Falso. Para filtrar un grupo, usamos el método de filtro y aplicamos alguna condición por la cual filtramos el grupo. 
 

Python3

# importing pandas module
import pandas as pd
 
# importing numpy as np
import numpy as np
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA'],
        'Score': [23, 34, 35, 45, 47, 50, 52, 53]}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Ahora filtramos los datos para devolver el Nombre que ha vivido dos o más veces. 
 

Python3

# filtering data using
# filter data
grp = df.groupby('Name')
grp.filter(lambda x: len(x) >= 2)

Producción : 
 

Publicación traducida automáticamente

Artículo escrito por ABHISHEK TIWARI 13 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 *