Sort rows or columns in Pandas Dataframe based on values - GeeksforGeeks

02 Jul, 2020
In this article, Let’s discuss how to Sort rows or columns in Pandas Dataframe based on values. Pandas sort_values() method sorts a data frame in Ascending or Descending order of passed Column. It’s different than the sorted Python function since it cannot sort a data frame and particular column cannot be selected.
Syntax: DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind=’quicksort’, na_position=’last’)
Parameters: This method will take following parameters :by: Single/List of column names to sort Data Frame by.axis: 0 or ‘index’ for rows and 1 or ‘columns’ for Column.ascending: Boolean value which sorts Data frame in ascending order if True.inplace: Boolean value. Makes the changes in passed data frame itself if True.kind: String which can have three inputs(‘quicksort’, ‘mergesort’ or ‘heapsort’) of the algorithm used to sort data frame.na_position: Takes two string input ‘last’ or ‘first’ to set position of Null values. Default is ‘last’.
Return Type: Returns a sorted Data Frame with Same dimensions as of the function caller Data Frame.
Now, Let’s create a sample dataframe :
# import pandas library as pdimport pandas as pd  # List of Tuplesstudents = [('Ankit', 22, 'Up', 'Geu'),           ('Ankita', 31, 'Delhi', 'Gehu'),           ('Rahul', 16, 'Tokyo', 'Abes'),           ('Simran', 41, 'Delhi', 'Gehu'),           ('Shaurya', 33, 'Delhi', 'Geu'),           ('Harshita', 35, 'Mumbai', 'Bhu' ),           ('Swapnil', 35, 'Mp', 'Geu'),           ('Priya', 35, 'Uk', 'Geu'),           ('Jeet', 35, 'Guj', 'Gehu'),           ('Ananya', 35, 'Up', 'Bhu')            ]  # Create a DataFrame object from# list of tuples with columns# and indices.details = pd.DataFrame(students, columns =['Name', 'Age',                                            'Place', 'College'],                        index =[ 'b', 'c', 'a', 'e', 'f',                                'g', 'i', 'j', 'k', 'd'])# show the dataframedetails
Output:
Example 1: Sort Dataframe rows based on a single column.
# import pandas library as pdimport pandas as pd  # List of Tuplesstudents = [('Ankit', 22, 'Up', 'Geu'),           ('Ankita', 31, 'Delhi', 'Gehu'),           ('Rahul', 16, 'Tokyo', 'Abes'),           ('Simran', 41, 'Delhi', 'Gehu'),           ('Shaurya', 33, 'Delhi', 'Geu'),           ('Harshita', 35, 'Mumbai', 'Bhu' ),           ('Swapnil', 35, 'Mp', 'Geu'),           ('Priya', 35, 'Uk', 'Geu'),           ('Jeet', 35, 'Guj', 'Gehu'),           ('Ananya', 35, 'Up', 'Bhu')            ]  # Create a DataFrame object from# list of tuples with columns# and indices.details = pd.DataFrame(students, columns =['Name', 'Age',                                           'Place', 'College'],                        index =[ 'b', 'c', 'a', 'e', 'f',                                'g', 'i', 'j', 'k', 'd'])  # Sort the rows of dataframe by 'Name' columnrslt_df = details.sort_values(by = 'Name')  # show the resultant Dataframerslt_df
Output:
Example 2: Sort Dataframe rows based on a multiple columns.
# import pandas library as pdimport pandas as pd  # List of Tuplesstudents = [('Ankit', 22, 'Up', 'Geu'),           ('Ananya', 31, 'Delhi', 'Gehu'),           ('Rahul', 16, 'Tokyo', 'Abes'),           ('Simran', 41, 'Delhi', 'Gehu'),           ('Shaurya', 33, 'Delhi', 'Geu'),           ('Harshita', 35, 'Mumbai', 'Bhu' ),           ('Priya', 35, 'Mp', 'Geu'),           ('Priya', 34, 'Uk', 'Geu'),           ('Jeet', 35, 'Guj', 'Gehu'),           ('Ananya', 35, 'Up', 'Bhu')            ]  # Create a DataFrame object from# list of tuples with columns# and indices.details = pd.DataFrame(students, columns =['Name', 'Age',                                            'Place', 'College'],                        index =[ 'b', 'c', 'a', 'e', 'f',                                'g', 'i', 'j', 'k', 'd'])  # sort Dataframe rows based on a 'Name' & 'Age' columns  # if duplicate value is present in 'Name' column# then sorting will be done according to 'Age' columnrslt_df = details.sort_values(by = ['Name', 'Age'])  # show the resultant Dataframerslt_df
Output:
Example 3: Sort Dataframe rows based on columns in Descending Order.
# import pandas library as pdimport pandas as pd  # List of Tuplesstudents = [('Ankit', 22, 'Up', 'Geu'),           ('Ananya', 31, 'Delhi', 'Gehu'),           ('Rahul', 16, 'Tokyo', 'Abes'),           ('Simran', 41, 'Delhi', 'Gehu'),           ('Shaurya', 33, 'Delhi', 'Geu'),           ('Harshita', 35, 'Mumbai', 'Bhu' ),           ('Priya', 35, 'Mp', 'Geu'),           ('Priya', 34, 'Uk', 'Geu'),           ('Jeet', 35, 'Guj', 'Gehu'),           ('Ananya', 35, 'Up', 'Bhu')            ]  # Create a DataFrame object from# list of tuples with columns# and indices.details = pd.DataFrame(students, columns =['Name', 'Age',                                           'Place', 'College'],                        index =[ 'b', 'c', 'a', 'e', 'f',                                 'g', 'i', 'j', 'k', 'd'])  # sort Dataframe rows based on "Name' # column in Descending Orderrslt_df = details.sort_values(by = 'Name', ascending = False)  # show the resultant Dataframerslt_df
Output:
Example 4: Sort Dataframe rows based on a column in Place.
# import pandas library as pdimport pandas as pd  # List of Tuplesstudents = [('Ankit', 22, 'Up', 'Geu'),           ('Ananya', 31, 'Delhi', 'Gehu'),           ('Rahul', 16, 'Tokyo', 'Abes'),           ('Simran', 41, 'Delhi', 'Gehu'),           ('Shaurya', 33, 'Delhi', 'Geu'),           ('Harshita', 35, 'Mumbai', 'Bhu' ),           ('Priya', 35, 'Mp', 'Geu'),           ('Priya', 34, 'Uk', 'Geu'),           ('Jeet', 35, 'Guj', 'Gehu'),           ('Ananya', 35, 'Up', 'Bhu')            ]  # Create a DataFrame object from# list of tuples with columns# and indices.details = pd.DataFrame(students, columns =['Name', 'Age',                                           'Place', 'College'],                        index =[ 'b', 'c', 'a', 'e', 'f',                                'g', 'i', 'j', 'k', 'd'])  # Sort the rows of dataframe by  'Name' # column inplacedetails.sort_values(by = 'Name', inplace = True)  # show the resultant Dataframedetails
Output:
Let’s see another simple Dataframe on which we are able to sort columns based on rows.
# import pandas library as pdimport pandas as pd  # List of Tuplesstudents = [           (75, 50, 60, 70),           (75, 55, 65, 75),           (75, 35, 45, 25),           (75, 90, 60, 70),           (76, 90, 70, 60),           (90, 80, 70, 60),           (65, 10, 30, 20)            ]  # Create a DataFrame object from# list of tuples with columns# and indices.details = pd.DataFrame(students, columns =['Hindi', 'Math',                                            'Science', 'English'],                        index = ['Ankit', 'Rahul', 'Aishwarya',                                  'Shivangi', 'Priya', 'Swapnil',                                 'Shaurya'])# show the dataframedetails
Output:
Example 1: Sort columns of a Dataframe based on a single row.
# import pandas library as pdimport pandas as pd  # List of Tuplesstudents = [           (75, 50, 60, 70),           (75, 55, 65, 75),           (75, 35, 45, 25),           (75, 90, 60, 70),           (76, 90, 70, 60),           (90, 80, 70, 60),           (65, 10, 30, 20)            ]  # Create a DataFrame object from# list of tuples with columns# and indices.details = pd.DataFrame(students, columns =['Hindi', 'Math',                                            'Science', 'English'],                        index = ['Ankit', 'Rahul', 'Aishwarya',                                  'Shivangi', 'Priya', 'Swapnil',                                 'Shaurya'])  # sort columns of a Dataframe based # on a 'Shivangi' rowrslt_df = details.sort_values(by = 'Shivangi', axis = 1)  # show the dataframerslt_df
Output:
Example 2: Sort columns of a Dataframe in Descending Order based on a single row.
# import pandas library as pdimport pandas as pd  # List of Tuplesstudents = [           (75, 50, 60, 70),           (75, 55, 65, 75),           (75, 35, 45, 25),           (75, 90, 60, 70),           (76, 90, 70, 60),           (90, 80, 70, 60),           (65, 10, 30, 20)            ]  # Create a DataFrame object from# list of tuples with columns# and indices.details = pd.DataFrame(students, columns =['Hindi', 'Math',                                            'Science', 'English'],                        index = ['Ankit', 'Rahul', 'Aishwarya',                                  'Shivangi', 'Priya', 'Swapnil',                                 'Shaurya'])  # Sort columns of a dataframe in descending order # based on a 'Shivangi' row rslt_df = details.sort_values(by = 'Shivangi', axis = 1, ascending = False)  rslt_df
Output:
Example 3: Sort columns of a Dataframe based on a multiple rows.
# import pandas library as pdimport pandas as pd  # List of Tuplesstudents = [           (75, 50, 60, 70),           (75, 55, 65, 75),           (75, 35, 45, 25),           (75, 90, 60, 70),           (76, 90, 70, 60),           (90, 80, 70, 60),           (65, 10, 30, 20)            ]  # Create a DataFrame object from# list of tuples with columns# and indices.details = pd.DataFrame(students, columns =['Hindi', 'Math',                                            'Science', 'English'],                        index = ['Ankit', 'Rahul', 'Aishwarya',                                  'Shivangi', 'Priya', 'Swapnil',                                 'Shaurya'])  # sort Dataframe columns based on a 'Shivangi' & 'Priya' rows  # if duplicate value is present in 'Shivangi'  row# then sorting will be done according to 'Priya' rowrslt_df = details.sort_values(by = ['Shivangi', 'Priya'], axis = 1)  rslt_df
Output:
Python pandas-dataFrame
Python-pandas
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Python Dictionary
Read a file line by line in Python
Enumerate() in Python
How to Install PIP on Windows ?
Iterate over a list in Python
Different ways to create Pandas Dataframe
Python String | replace()
Python program to convert a list to string
Reading and Writing to text files in Python
sum() function in Python