Contare i valori unici per gruppo in Pandas

Ahmed Waheed 30 gennaio 2023
  1. Metodo df.groupby().nunique()
  2. Metodo df.groupby().agg()
  3. Metodo df.groupby().unique()
Contare i valori unici per gruppo in Pandas

Quando lavoriamo con set di dati di grandi dimensioni, a volte dobbiamo applicare alcune funzioni a un gruppo specifico di dati. Ad esempio, abbiamo un set di dati di paesi e il codice privato che usano per questioni private. Vogliamo contare il numero di codici utilizzati da un paese. Di seguito sono elencati i diversi metodi da groupby() per contare i valori univoci.

  1. Metodo df.groupby().nunique()
  2. Metodo df.groupby().agg()
  3. Metodo df.groupby().unique()

Useremo lo stesso DataFrame nelle prossime sezioni come segue,

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)

Il seguente sarà l’output.

   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

Metodo df.groupby().nunique()

Vediamo come la funzione df.groupby().nunique() raggrupperà i nostri paesi.

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)

Verrà emesso quanto segue.

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

Ciò mostra che il Canada utilizza un codice, la Germania utilizza due codici e così via.

Metodo df.groupby().agg()

Questo metodo funziona come df.groupby().nunique(). Dobbiamo passare la funzione nunique() alla funzione 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)

Produzione:

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

Si gggrega usando la funzione pd.Series.nunique sopra la colonna code.

Metodo df.groupby().unique()

Questo metodo è utile quando vuoi vedere quale paese sta usando quali codici.

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)

Verrà emesso quanto segue.

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

Articolo correlato - Pandas DataFrame