Pandas GroupBy: cuenta las ocurrencias de cada combinación

En este artículo, agruparemos por dos columnas y contaremos las ocurrencias de cada combinación en Pandas. 

El método DataFrame.groupby() se usa para separar el DataFrame en grupos. Generará el número de conteos de datos similares presentes en una columna particular del marco de datos.

Sintaxis: DataFrame.groupby(by=Ninguno, eje=0, nivel=Ninguno)

Parámetros:

  • por: asignación, función, string, etiqueta o iterable para agrupar elementos.
  • eje: agrupa junto con la fila (eje = 0) o la columna (eje = 1).
  • nivel: entero. valor para el grupo por un nivel o niveles particulares.

Para comprender el concepto, utilizaremos un conjunto de datos simple que se proporciona a continuación:

Python3

# Import library
import pandas as pd
import numpy as np
 
# initialise data of lists.
Data = {'Products':['Box','Color','Pencil','Eraser','Color',
                    'Pencil','Eraser','Color','Color','Eraser','Eraser','Pencil'],
 
       'States':['Jammu','Kolkata','Bihar','Gujarat','Kolkata',
                 'Bihar','Jammu','Bihar','Gujarat','Jammu','Kolkata','Bihar'],
 
       'Sale':[14,24,31,12,13,7,9,31,18,16,18,14]}
 
# Create DataFrame
df = pd.DataFrame(Data, columns=['Products','States','Sale'])
 
# Display the Output
display(df)

Producción:

Método 1: Usando Pandas dataframe.size()

Devuelve un número total de elementos, se compara multiplicando filas y columnas devueltas por el método de forma. 

Sintaxis: marco de datos.tamaño

Python3

new = df.groupby(['States','Products']).size()
display(new)

 Producción: 

 Método 2: Usando Pandas dataframe.count()

Se utiliza para contar el no. de observaciones no NA/nulas a lo largo del eje dado. También funciona con datos de tipo no flotante. 

Sintaxis: DataFrame.count(axis=0, level=Ninguno, numeric_only=False)

Parámetros:

  • eje: 0 o ‘índice’ para filas, 1 o ‘columnas’ para columnas
  • level : si el eje es un MultiIndex (jerárquico), cuente a lo largo de un nivel particular, colapsando en un DataFrame
  • numeric_only: incluye solo datos flotantes, int y booleanos

Devuelve: recuento: Serie (o DataFrame si se especifica el nivel)

Python3

new = df.groupby(['States','Products'])['Sale'].count()
display(new)

Producción:

Método 3: Usando Pandas reset_index() 

Es un método para restablecer el índice de un marco de datos. El método reset_index() establece una lista de números enteros que van desde 0 hasta la longitud de los datos como un índice.  

Sintaxis: DataFrame.reset_index(level=Ninguno, drop=False, inplace=False, col_level=0, col_fill=”)

Parámetros:

  • nivel: int, string o una lista para seleccionar y eliminar la columna pasada del índice.
  • soltar: valor booleano, agrega la columna de índice reemplazada a los datos si es falso.
  • inplace: valor booleano, realice cambios en el marco de datos original si es True.
  • col_level: Seleccione en qué nivel de columna insertar las etiquetas.
  • col_fill: Objeto, para determinar cómo se nombran los demás niveles.

Tipo de devolución: marco de datos

Python3

new = df.groupby(['States','Products'])['Sale'].agg('count').reset_index()
display(new)

Producción:

Método 4: Usar la función pandas.pivot()

Produce una tabla dinámica basada en 3 columnas del DataFrame. Utiliza valores únicos de índice/columnas y los rellena con valores.

Sintaxis: pandas.pivot(índice, columnas, valores)

Parámetros:

  • index[ndarray] : Etiquetas a usar para hacer el índice del nuevo marco
  • column[ndarray] : Etiquetas a usar para hacer columnas de un nuevo marco
  • valores [ndarray]: valores a usar para completar los valores del nuevo marco

Devoluciones: Remodelado DataFrame
Excepción: ValueError generado si hay duplicados.

Python3

new = df.groupby(['States','Products'],as_index = False
                ).count().pivot('States','Products').fillna(0)
display(new)

Producción:

Publicación traducida automáticamente

Artículo escrito por skrg141 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 *