Contare la frequenza in cui si verifica un valore in Pandas Dataframe

  1. Metodo df.groupby().count()
  2. Metodo Series.value_counts()
  3. Metodo df.groupby().size()

A volte, quando lavori con dataframe, potresti voler contare quante volte un valore si trova nella colonna o in altre parole per calcolare la frequenza. Principalmente tre metodi vengono utilizzati per questo scopo. Due di loro provengono dai metodi DataFrame.groupby(). Vediamoli uno per uno.

  1. df.groupby().count()
  2. Series.value_counts()
  3. df.groupby().size()

Useremo lo stesso DataFrame nelle prossime sezioni come segue,

import pandas as pd

df = pd.DataFrame({
                    'A': [
                        'jim',
                        'jim',
                        'jim',
                        'jim',
                        'sal',
                        'tom',
                        'tom',
                        'sal',
                        'sal'],
                    'B': [
                        'a',
                        'b', 
                        'a', 
                        'b', 
                        'b', 
                        'b', 
                        'a', 
                        'a', 
                        'b']
                    })  

Metodo df.groupby().count()

Se vuoi calcolare la frequenza su una singola colonna, questo metodo è il migliore.

import pandas as pd

df = pd.DataFrame({
                    'A': [
                        'jim',
                        'jim',
                        'jim',
                        'jim',
                        'sal',
                        'tom',
                        'tom',
                        'sal',
                        'sal'],
                    'B': [
                        'a',
                        'b', 
                        'a', 
                        'b', 
                        'b', 
                        'b', 
                        'a', 
                        'a', 
                        'b']
                    })  

freq = df.groupby(['A']).count() 
print(freq)

freq = df.groupby(['B']).count() 
print(freq)

Verrà emesso quanto segue.

     B
A     
jim  4
sal  3
tom  2
   A
B   
a  4
b  5

Metodo Series.value_counts()

Poiché ogni oggetto dataframe è una raccolta di oggetti Series, questo metodo è meglio utilizzato per l’oggetto pandas.Series.

Ora usa la funzione Series.values_counts()

import pandas as pd

df = pd.DataFrame({
                    'A': [
                        'jim',
                        'jim',
                        'jim',
                        'jim',
                        'sal',
                        'tom',
                        'tom',
                        'sal',
                        'sal'],
                    'B': [
                        'a',
                        'b', 
                        'a', 
                        'b', 
                        'b', 
                        'b', 
                        'a', 
                        'a', 
                        'b']
                    })  

freq = df['A'].value_counts() 
print(freq) 

freq = df['B'].value_counts() 
print(freq) 

Verrà emesso quanto segue.

jim    4
sal    3
tom    2
Name: A, dtype: int64
b    5
a    4
Name: B, dtype: int64

Metodo df.groupby().size()

I due metodi precedenti non possono essere usati per contare la frequenza di più colonne, ma possiamo usare df.groupby().size() per più colonne contemporaneamente.

import pandas as pd

df = pd.DataFrame({
                    'A': [
                        'jim',
                        'jim',
                        'jim',
                        'jim',
                        'sal',
                        'tom',
                        'tom',
                        'sal',
                        'sal'],
                    'B': [
                        'a',
                        'b', 
                        'a', 
                        'b', 
                        'b', 
                        'b', 
                        'a', 
                        'a', 
                        'b']
                    })  

freq = df.groupby(['A', 'B']).size() 
print(freq)

Verrà emesso quanto segue.

A    B
jim  a    2
     b    2
sal  a    1
     b    2
tom  a    1
     b    1
dtype: int64

Articolo correlato - Pandas DataFrame

  • Unisci i DataFrame di Pandas sull'indice
  • Converti colonna DataFrame in stringa in Pandas