HOWTO · Pandas

Conte valores únicos por grupo(s) em Pandas

valores de contagem por coluna de agrupamento em DataFrame usando métodos df.groupby().nunique(), df.groupby().agg(), e df.groupby().unique() na biblioteca de pandas

Nesta página

Quando estamos trabalhando com grandes conjuntos de dados, às vezes temos que aplicar alguma função a um grupo específico de dados. Por exemplo, temos um array de dados de países e o código privado que eles utilizam para assuntos privados. Queremos contar o número de códigos que um país utiliza. Abaixo estão listadas as diferentes formas de contar valores únicos.

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

Utilizaremos o mesmo DataFrame nas próximas seções como a seguir,

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)

O resultado será o seguinte.

   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

Vamos ver como df.groupby().nunique() funcionará groupby nossos 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)

O seguinte será produzido.

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

Isto mostra que o Canadá está utilizando um código, a Alemanha está utilizando dois códigos, e assim por diante.

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

Este método funciona como df.groupby().nunique(). Precisamos passar a função nunique() para a função 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)

Resultado:

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

Ele é gerado utilizando a função pd.Series.nunique sobre a coluna code.

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

Este método é útil quando você quer ver qual país está usando quais 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)

O seguinte será produzido.

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