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 pd import pandas as pd # List of Tuples students = [( '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 dataframe details |
Output:
Example 1: Sort Dataframe rows based on a single column.
# import pandas library as pd import pandas as pd # List of Tuples students = [( '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' column rslt_df = details.sort_values(by = 'Name' ) # show the resultant Dataframe rslt_df |
Output:
Example 2: Sort Dataframe rows based on a multiple columns.
# import pandas library as pd import pandas as pd # List of Tuples students = [( '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' column rslt_df = details.sort_values(by = [ 'Name' , 'Age' ]) # show the resultant Dataframe rslt_df |
Output:
Example 3: Sort Dataframe rows based on columns in Descending Order.
# import pandas library as pd import pandas as pd # List of Tuples students = [( '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 Order rslt_df = details.sort_values(by = 'Name' , ascending = False ) # show the resultant Dataframe rslt_df |
Output:
Example 4: Sort Dataframe rows based on a column in Place.
# import pandas library as pd import pandas as pd # List of Tuples students = [( '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 inplace details.sort_values(by = 'Name' , inplace = True ) # show the resultant Dataframe details |
Output:
Let’s see another simple Dataframe on which we are able to sort columns based on rows.
# import pandas library as pd import pandas as pd # List of Tuples students = [ ( 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 dataframe details |
Output:
Example 1: Sort columns of a Dataframe based on a single row.
# import pandas library as pd import pandas as pd # List of Tuples students = [ ( 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' row rslt_df = details.sort_values(by = 'Shivangi' , axis = 1 ) # show the dataframe rslt_df |
Output:
Example 2: Sort columns of a Dataframe in Descending Order based on a single row.
# import pandas library as pd import pandas as pd # List of Tuples students = [ ( 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 pd import pandas as pd # List of Tuples students = [ ( 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' row rslt_df = details.sort_values(by = [ 'Shivangi' , 'Priya' ], axis = 1 ) rslt_df |
Output: