Compter des valeurs uniques par groupe(s) dans Pandas

Ahmed Waheed 30 janvier 2023
  1. Méthode df.groupby().nunique()
  2. Méthode df.groupby().agg()
  3. Méthode df.groupby().unique()
Compter des valeurs uniques par groupe(s) dans Pandas

Lorsque nous travaillons avec de grands ensembles de données, nous devons parfois appliquer une fonction à un groupe spécifique de données. Par exemple, nous avons un ensemble de données de pays et le code privé qu’ils utilisent pour les affaires privées. Nous voulons compter le nombre de codes utilisés par un pays. Voici les différentes manières de compter des valeurs uniques.

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

Nous utiliserons le même DataFrame dans les sections suivantes comme suit,

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)

Ce qui suit sera la sortie.

   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

Méthode df.groupby().nunique()

Voyons comment la fonction df.groupby().nunique() va groupby nos pays.

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)

Les éléments suivants seront sortis.

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

Cela montre que le Canada utilise un seul code, l’Allemagne utilise deux codes, etc.

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

Cette méthode fonctionne de la même manière que df.groupby().nunique(). Nous devons passer la fonction nunique() à la fonction 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)

Production:

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

Il regroupe en utilisant la fonction pd.Series.nunique sur la colonne code.

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

Cette méthode est utile lorsque vous souhaitez voir quel pays utilise quels codes.

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)

Les éléments suivants seront sortis.

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

Article connexe - Pandas DataFrame