Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
Selected Reading
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.
Advertisements
