Python Pandas - Sort DataFrame in ascending order according to the element frequency

When working with DataFrames, you may need to sort data based on how frequently elements appear. This can be achieved by combining groupby(), count(), and sort_values() methods.

Syntax

To sort DataFrame in ascending order according to element frequency ?

df.groupby(['column']).count().reset_index(name='Count').sort_values(['Count'], ascending=True)

Creating the DataFrame

First, let's create a DataFrame with car data ?

import pandas as pd

# Create DataFrame
dataFrame = pd.DataFrame({
    "Car": ['BMW', 'Lexus', 'BMW', 'Mustang', 'Mercedes', 'Lexus'],
    "Reg_Price": [7000, 1500, 5000, 8000, 9000, 2000],
    "Place": ['Pune', 'Delhi', 'Mumbai', 'Hyderabad', 'Bangalore', 'Chandigarh']
})

print("Original DataFrame:")
print(dataFrame)
Original DataFrame:
       Car       Place  Reg_Price
0      BMW        Pune       7000
1    Lexus       Delhi       1500
2      BMW      Mumbai       5000
3  Mustang   Hyderabad       8000
4 Mercedes   Bangalore       9000
5    Lexus  Chandigarh       2000

Sorting by Element Frequency

To sort by frequency in ascending order, we group by the column, count occurrences, and sort ?

import pandas as pd

# Create DataFrame
dataFrame = pd.DataFrame({
    "Car": ['BMW', 'Lexus', 'BMW', 'Mustang', 'Mercedes', 'Lexus'],
    "Reg_Price": [7000, 1500, 5000, 8000, 9000, 2000],
    "Place": ['Pune', 'Delhi', 'Mumbai', 'Hyderabad', 'Bangalore', 'Chandigarh']
})

# Sort by frequency in ascending order
frequency_sorted = dataFrame.groupby(['Car'])['Reg_Price'].count().reset_index(name='Count').sort_values(['Count'], ascending=True)

print("Sorted by frequency (ascending):")
print(frequency_sorted)
Sorted by frequency (ascending):
       Car  Count
2 Mercedes      1
3  Mustang      1
0      BMW      2
1    Lexus      2

How It Works

The process involves three main steps ?

  • groupby(['Car']) − Groups rows by the 'Car' column
  • count() − Counts occurrences in each group
  • sort_values(['Count'], ascending=True) − Sorts by count in ascending order

Alternative Approach Using value_counts()

You can also use value_counts() method for a more direct approach ?

import pandas as pd

# Create DataFrame
dataFrame = pd.DataFrame({
    "Car": ['BMW', 'Lexus', 'BMW', 'Mustang', 'Mercedes', 'Lexus'],
    "Reg_Price": [7000, 1500, 5000, 8000, 9000, 2000],
    "Place": ['Pune', 'Delhi', 'Mumbai', 'Hyderabad', 'Bangalore', 'Chandigarh']
})

# Using value_counts() and sorting in ascending order
frequency_counts = dataFrame['Car'].value_counts(ascending=True).reset_index()
frequency_counts.columns = ['Car', 'Count']

print("Using value_counts():")
print(frequency_counts)
Using value_counts():
       Car  Count
0 Mercedes      1
1  Mustang      1
2      BMW      2
3    Lexus      2

Conclusion

Use groupby().count().sort_values() to sort DataFrames by element frequency. The value_counts() method provides a simpler alternative for counting occurrences in a single column.

Updated on: 2026-03-26T02:56:19+05:30

913 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements