Contar valores únicos por grupos en los pandas

Ahmed Waheed 30 enero 2023
  1. df.groupby().nunique() método
  2. df.groupby().agg() método
  3. df.groupby().unique() método
Contar valores únicos por grupos en los pandas

Cuando trabajamos con grandes conjuntos de datos, a veces tenemos que aplicar alguna función a un grupo específico de datos. Por ejemplo, tenemos un conjunto de datos de países y el código privado que utilizan para asuntos privados. Queremos contar el número de códigos que utiliza un país. A continuación se enumeran las diferentes formas de contar los valores únicos.

  1. df.groupby().nunique() Método
  2. df.groupby().agg() Método
  3. df.groupby().unique() Método

Usaremos el mismo DataFrame en las siguientes secciones como sigue,

import pandas as pd

data = [
    [999, "Switzerland"],
    [113, "Switzerland"],
    [112, "Japan"],
    [112, "Switzerland"],
    [113, "Canada"],
    [114, "Japan"],
    [100, "Germany"],
    [114, "Japan"],
    [115, "Germany"],
]
df = pd.DataFrame(data, columns=["code", "Countries"])
print(df)

El resultado será el siguiente.

   code    Countries
0   999  Switzerland
1   113  Switzerland
2   112        Japan
3   112  Switzerland
4   113       Canada
5   114        Japan
6   100      Germany
7   114        Japan
8   115      Germany

df.groupby().nunique() método

Veamos cómo la función df.groupby().nunique() se agrupará por nuestros países.

import pandas as pd

data = [
    [999, "Switzerland"],
    [113, "Switzerland"],
    [112, "Japan"],
    [112, "Switzerland"],
    [113, "Canada"],
    [114, "Japan"],
    [100, "Germany"],
    [114, "Japan"],
    [115, "Germany"],
]

df = pd.DataFrame(data, columns=["code", "Countries"])
result = df.groupby("Countries")["code"].nunique()
print(result)

El resultado será el siguiente.

Countries
Canada         1
Germany        2
Japan          2
Switzerland    3
Name: code, dtype: int64

Esto muestra que Canadá está usando un código, Alemania está usando dos códigos, y así sucesivamente.

df.groupby().agg() método

Este método funciona igual que df.groupby().nunique(). Necesitamos pasar la función nunique() a la función agg().

import pandas as pd

data = [
    [999, "Switzerland"],
    [113, "Switzerland"],
    [112, "Japan"],
    [112, "Switzerland"],
    [113, "Canada"],
    [114, "Japan"],
    [100, "Germany"],
    [114, "Japan"],
    [115, "Germany"],
]
df = pd.DataFrame(data, columns=["code", "Countries"])
result = df.groupby(by="Countries", as_index=False).agg({"code": pd.Series.nunique})
print(result)

Producción :

     Countries  code
0       Canada     1
1      Germany     2
2        Japan     2
3  Switzerland     3
.agg({'code': pd.Series.nunique})

Se agrega usando la función pd.Series.nunique sobre la columna code.

df.groupby().unique() método

Este método es útil cuando se quiere ver qué país está usando qué códigos.

import pandas as pd

data = [
    [999, "Switzerland"],
    [113, "Switzerland"],
    [112, "Japan"],
    [112, "Switzerland"],
    [113, "Canada"],
    [114, "Japan"],
    [100, "Germany"],
    [114, "Japan"],
    [115, "Germany"],
]
result = df.groupby("Countries")["code"].unique()
print(result)

Se obtendrán los siguientes resultados.

Countries
Canada                   [113]
Germany             [100, 115]
Japan               [112, 114]
Switzerland    [999, 113, 112]
Name: code, dtype: object

Artículo relacionado - Pandas DataFrame