Pandas es una poderosa biblioteca de manipulación de datos en Python. Una tarea frecuente implica determinar el número de valores únicos dentro de varios grupos de su conjunto de datos. Este artículo explorará tres métodos eficientes de Pandas para lograr esto: groupby().nunique()
, groupby().agg()
y groupby().unique()
. Cada método se demostrará con ejemplos claros.
Tabla de contenido
Método groupby().nunique()
El método nunique()
, usado después de una operación groupby()
, proporciona directamente el conteo de valores únicos para cada grupo. Este suele ser el enfoque más eficiente y conciso.
Considere este DataFrame de muestra:
import pandas as pd
data = {'Grupo': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C', 'C'],
'Valor': ['X', 'Y', 'X', 'Z', 'Z', 'X', 'Y', 'Z', 'X']}
df = pd.DataFrame(data)
print(df)
Esto produce:
Grupo Valor
0 A X
1 A Y
2 A X
3 B Z
4 B Z
5 C X
6 C Y
7 C Z
8 C X
Para contar las entradas únicas de ‘Valor’ por ‘Grupo’, use:
conteos_unicos = df.groupby('Grupo')['Valor'].nunique()
print(conteos_unicos)
La salida:
Grupo
A 2
B 1
C 3
Name: Valor, dtype: int64
Esto muestra que el grupo ‘A’ tiene 2 valores únicos, ‘B’ tiene 1 y ‘C’ tiene 3.
Método groupby().agg()
El método agg()
ofrece mayor flexibilidad, permitiendo la aplicación de múltiples funciones de agregación a la vez. Podemos usarlo con nunique()
para contar valores únicos, junto con otras funciones si es necesario.
Usando el mismo DataFrame:
datos_agregados = df.groupby('Grupo')['Valor'].agg(['nunique', 'count'])
print(datos_agregados)
Salida:
nunique count
Grupo
A 2 3
B 1 2
C 3 4
Esto muestra tanto el número de valores únicos (nunique
) como el conteo total de valores (count
) para cada grupo. Esto es beneficioso para un análisis más completo.
Método groupby().unique()
El método unique()
devuelve los valores únicos en sí mismos para cada grupo, no su conteo. Si bien no proporciona directamente el conteo, es útil si necesita ver los valores únicos reales.
valores_unicos = df.groupby('Grupo')['Valor'].unique()
print(valores_unicos)
Salida:
Grupo
A [X, Y]
B [Z]
C [X, Y, Z]
Name: Valor, dtype: object
Para obtener el conteo, se requiere un paso adicional:
conteos_valores_unicos = valores_unicos.apply(len)
print(conteos_valores_unicos)
Esto produce el mismo resultado que nunique()
:
Grupo
A 2
B 1
C 3
Name: Valor, dtype: int64
Sin embargo, esto es menos eficiente que usar nunique()
directamente.
Conclusión: Para simplemente contar valores únicos por grupo, groupby().nunique()
es el método más directo y eficiente. groupby().agg()
ofrece más flexibilidad para combinar nunique()
con otras agregaciones, mientras que groupby().unique()
es útil cuando necesita ver los valores únicos. Elija el método más adecuado a sus necesidades analíticas.