Contare i valori unici per gruppo in Pandas

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

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

  • Differenza tra Pandas apply, map e applymap
  • Unisci i DataFrame di Pandas sull'indice