Conte valores únicos por grupo(s) em Pandas

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

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

Artigo relacionado - Pandas DataFrame

  • Como Criar uma Coluna Vazia em Pandas DataFrame
  • Como adicionar o Header Row a um DataFrame Pandas