69

I'm trying to sort a dataframe by descending. I put 'False' in the ascending argument, but my order is still ascending.

My code is:

from pandas import DataFrame
import pandas as pd

d = {'one':[2,3,1,4,5],
     'two':[5,4,3,2,1],
     'letter':['a','a','b','b','c']}

df = DataFrame(d)

test = df.sort(['one'], ascending=[False])

but the output is

  letter  one  two
2      b    1    3
0      a    2    5
1      a    3    4
3      b    4    2
4      c    5    1
user3636476
  • 1,357
  • 2
  • 11
  • 22
  • 1
    Your code actually gives the desired results on pandas version 0.14.1, so you may want to upgrade if possible. – Marius Jul 28 '14 at 06:12
  • Since this question refers to syntax which has worked fine since 0.14.1, (and was a fairly obvious typo before that), probably should close as not-an-issue. – smci May 27 '18 at 11:59

6 Answers6

94

New syntax (either):

 test = df.sort_values(['one'], ascending=[False])
 test = df.sort_values(['one'], ascending=[0])
Merlin
  • 24,552
  • 41
  • 131
  • 206
64

Edit: This is out of date, see @Merlin's answer.

[False], being a nonempty list, is not the same as False. You should write:

test = df.sort('one', ascending=False)
U2EF1
  • 12,907
  • 3
  • 35
  • 37
24

For pandas 0.17 and above, use this :

test = df.sort_values('one', ascending=False)

Since 'one' is a series in the pandas data frame, hence pandas will not accept the arguments in the form of a list.

M--
  • 25,431
  • 8
  • 61
  • 93
Arko
  • 289
  • 2
  • 5
  • I seriously doubt that "hence pandas will not accept the arguments in the form of a list." is true. It does accept `ascending=[False]` on pandas 0.19. Could you elaborate? – MSeifert Apr 29 '17 at 17:16
  • BTW, since typing "ascending=False" is a lot to type and I use it a lot, `sort_values('one')[::-1]` will work if you take the performance hit. – 576i Feb 13 '19 at 10:34
4
from pandas import DataFrame
import pandas as pd

d = {'one':[2,3,1,4,5],
 'two':[5,4,3,2,1],
 'letter':['a','a','b','b','c']}

df = DataFrame(d)

test = df.sort_values(['one'], ascending=False)
test
Vivekanand AIML
  • 173
  • 1
  • 2
  • 7
0

from pandas import DataFrame import pandas as pd

d = {'one':[2,3,1,4,5], 'two':[5,4,3,2,1], 'letter':['a','a','b','b','c']}

df = DataFrame(d)

#check below statement

df.groupby(["one"]).count().sort_values("one", ascending=False)

  • Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Jan 23 '23 at 11:11
-1

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_values.html

I don't think you should ever provide the False value in square brackets (ever), also the column values when they are more than one, then only they are provided as a list! Not like ['one'].

test = df.sort_values(by='one', ascending = False)
aspiring1
  • 344
  • 1
  • 13
  • 32
  • Use you square brackets, because you might need to sort multiple columns. Look at OP question. – Merlin Sep 03 '18 at 21:10