Pandas DataFrame: Sort the data frame first by 'name' in descending order, then by 'score' in ascending order
Write a Pandas program to sort the data frame first by 'name' in descending order, then by 'score' in ascending order.
Sample DataFrame:
exam_data = {'name': ['Anastasia', 'Dima', 'Katherine', 'James', 'Emily', 'Michael', 'Matthew', 'Laura', 'Kevin', 'Jonas'],
'score': [12.5, 9, 16.5, np.nan, 9, 20, 14.5, np.nan, 8, 19],
'attempts': [1, 3, 2, 3, 2, 3, 1, 1, 2, 1],
'qualify': ['yes', 'no', 'yes', 'no', 'no', 'yes', 'yes', 'no', 'no', 'yes']}
labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
Values for each column will be:
name : 'Suresh', score: 15.5, attempts: 1, qualify: ‘yes’, label: ‘k’
Sample Solution :
Python Code :
import pandas as pd
import numpy as np
exam_data = {'name': ['Anastasia', 'Dima', 'Katherine', 'James', 'Emily', 'Michael', 'Matthew', 'Laura', 'Kevin', 'Jonas'],
'score': [12.5, 9, 16.5, np.nan, 9, 20, 14.5, np.nan, 8, 19],
'attempts': [1, 3, 2, 3, 2, 3, 1, 1, 2, 1],
'qualify': ['yes', 'no', 'yes', 'no', 'no', 'yes', 'yes', 'no', 'no', 'yes']}
labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
df = pd.DataFrame(exam_data , index=labels)
print("Orginal rows:")
print(df)
df = df.sort_values(by=['name', 'score'], ascending=[False, True])
print("Sort the data frame first by ‘name’ in descending order, then by ‘score’ in ascending order:")
print(df)
Sample Output:
Orginal rows: name score attempts qualify a Anastasia 12.5 1 yes b Dima 9.0 3 no c Katherine 16.5 2 yes d James NaN 3 no e Emily 9.0 2 no f Michael 20.0 3 yes g Matthew 14.5 1 yes h Laura NaN 1 no i Kevin 8.0 2 no j Jonas 19.0 1 yes Sort the data frame first by ‘name’ in descending order, then by ‘score’ in ascending order: name score attempts qualify f Michael 20.0 3 yes g Matthew 14.5 1 yes h Laura NaN 1 no i Kevin 8.0 2 no c Katherine 16.5 2 yes j Jonas 19.0 1 yes d James NaN 3 no e Emily 9.0 2 no b Dima 9.0 3 no a Anastasia 12.5 1 yes
Explanation:
The above code first creates a Pandas DataFrame ‘df’ from the dictionary ‘exam_data’ using the labels labels as the row index.
df.sort_values(by=['name', 'score'], ascending=[False, True]): This line sorts the DataFrame by the 'name' column in descending order and within each name, it sorts the 'score' column in ascending order.
Python-Pandas Code Editor:
Have another way to solve this solution? Contribute your code (and comments) through Disqus.
Previous: Write a Pandas program to append a new row 'k' to DataFrame with given values for each column. Now delete the new row and return the original data frame.
Next: Write a Pandas program to replace the ‘qualify' column contains the values 'yes' and 'no' with True and False.
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics