How to Count the Frequency a Value Occurs in Pandas Dataframe

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

Sometimes when you are working with dataframe you might want to count how many times a value occurs in the column or in other words to calculate the frequency. Majorly three methods are used for this purpose. Let us take a look at them one by one.

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

We will use the same DataFrame in the next sections as follows,

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']
                    })  

df.groupby().count() Method

If you want to calculate the frequency over a single column then this method is best.

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)

The following will be output.

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

Series.value_counts() Method

As every dataframe object is a collection of Series objects, this method is best used for pandas.Series object.

Now use Series.values_counts() function

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) 

The following will be output.

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

df.groupby().size() Method

The above two methods cannot be used to count the frequency of multiple columns but we can use df.groupby().size() for multiple columns at the same time.

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)

The following will be output.

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