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: