Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to sort a dataFrame in python pandas by two or more columns?

Suppose I have a dataframe with columns a, b and c, I want to sort the dataframe by column b in ascending order, and by column c in descending order, how do I do this?

like image 458
Rakesh Adhikesavan Avatar asked Jun 17 '13 06:06

Rakesh Adhikesavan


People also ask

How do I sort columns in Pandas DataFrame?

Sort a pandas DataFrame by the values of one or more columns. Use the ascending parameter to change the sort order. Sort a DataFrame by its index using . sort_index()

How many ways can you sort Pandas DataFrame?

All of the sorting methods available in Pandas fall under the following three categories: Sorting by index labels; Sorting by column values; Sorting by a combination of index labels and column values.

How do I sort a DataFrame by a group?

To group Pandas dataframe, we use groupby(). To sort grouped dataframe in ascending or descending order, use sort_values(). The size() method is used to get the dataframe size.


1 Answers

As of the 0.17.0 release, the sort method was deprecated in favor of sort_values. sort was completely removed in the 0.20.0 release. The arguments (and results) remain the same:

df.sort_values(['a', 'b'], ascending=[True, False]) 

You can use the ascending argument of sort:

df.sort(['a', 'b'], ascending=[True, False]) 

For example:

In [11]: df1 = pd.DataFrame(np.random.randint(1, 5, (10,2)), columns=['a','b'])  In [12]: df1.sort(['a', 'b'], ascending=[True, False]) Out[12]:    a  b 2  1  4 7  1  3 1  1  2 3  1  2 4  3  2 6  4  4 0  4  3 9  4  3 5  4  1 8  4  1 

As commented by @renadeen

Sort isn't in place by default! So you should assign result of the sort method to a variable or add inplace=True to method call.

that is, if you want to reuse df1 as a sorted DataFrame:

df1 = df1.sort(['a', 'b'], ascending=[True, False]) 

or

df1.sort(['a', 'b'], ascending=[True, False], inplace=True) 
like image 194
Andy Hayden Avatar answered Sep 23 '22 00:09

Andy Hayden