使用Pandas对数据框进行降序排序

70
我想按降序排序一张数据表。我在ascending参数中输入了“False”,但是我的顺序仍然是升序。
我的代码是:

我试图按降序排序一个dataframe。我在ascending参数中放置了“False”,但我的顺序仍然是升序。

我的代码如下:

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])

但是输出结果是

  letter  one  two
2      b    1    3
0      a    2    5
1      a    3    4
3      b    4    2
4      c    5    1

1
你的代码在 pandas 版本 0.14.1 上实际上给出了期望的结果,因此如果可能的话,你可能想要升级。 - Marius
由于这个问题涉及到自0.14.1以来一直有效的语法(在那之前是一个相当明显的拼写错误),所以可能应该将其关闭,因为这不是一个问题。 - smci
6个回答

95

新语法(两者均可):

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

3
你也可以对多列进行操作:test = df.sort_values(['one','two'], ascending=[0,0]) - ski_squaw

64

编辑:此内容已过时,请查看 @Merlin 的回答。

[False] 是一个非空的 列表,与 False 不同。你应该写成:

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

6
请看下方的答案,以适用于最新版本的 Pandas。 - yuqli
@merlin 在这里,看看我的答案...SO把它放到了最底部。 - Merlin

24

对于 pandas 0.17 及以上版本,请使用以下代码:

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

由于“one”是Pandas数据框中的系列,因此Pandas不会接受以列表形式提供的参数。


我严重怀疑“因此pandas不会接受以列表形式提供的参数”是正确的。在pandas 0.19上,它确实接受ascending=[False]。你能详细说明一下吗? - MSeifert
顺便提一下,由于输入“ascending=False”需要打很多字,而我经常使用它,如果你可以承受性能损失,那么sort_values('one')[::-1]也可以起到同样的效果。 - 576i

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

0

从pandas库中导入DataFrame,同时用别名pd代替pandas

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

df = DataFrame(d)

#检查如下语句

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


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

-1

使用方括号,因为您可能需要对多列进行排序。请查看原始问题。 - Merlin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接