【问题标题】:python, sort descending dataframe with pandaspython,用熊猫对降序数据框进行排序
【发布时间】:2014-09-19 06:21:00
【问题描述】:

我正在尝试按降序对数据框进行排序。 我在升序参数中输入了“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

【问题讨论】:

  • 您的代码实际上在 pandas 0.14.1 版上给出了预期的结果,因此您可能需要尽可能升级。
  • 由于这个问题指的是自 0.14.1 以来一直运行良好的语法(在此之前是一个相当明显的错字),因此可能应该作为非问题关闭。

标签: python sorting pandas


【解决方案1】:

编辑:这已经过时了,请参阅@Merlin 的回答。

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

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

【讨论】:

  • 只是轻轻指出下面的答案以使用最新的 Pandas 版本。
  • @merlin 在这里,看看我的答案.. 所以已经把它放到了底部。
【解决方案2】:

新语法(任一):

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

【讨论】:

  • 您也可以对多个列执行此操作:test = df.sort_values(['one','two'], ascending=[0,0])
【解决方案3】:

对于 pandas 0.17 及更高版本,使用这个:

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

由于 'one' 是 pandas 数据框中的一个系列,因此 pandas 不会接受列表形式的参数。

【讨论】:

  • 我严重怀疑“因此 pandas 不会接受列表形式的参数”。是真的。它在 pandas 0.19 上接受 ascending=[False]。你能详细说明一下吗?
  • 顺便说一句,由于输入“ascending=False”需要输入很多内容,而且我经常使用它,所以如果性能受到影响,sort_values('one')[::-1] 会起作用。
【解决方案4】:

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

我认为您永远不应该在方括号中提供False 值(永远),当列值超过一个时,它们也仅作为列表提供!不像['one']

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

【讨论】:

  • 使用方括号,因为您可能需要对多列进行排序。看OP问题。
【解决方案5】:
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

【讨论】:

    猜你喜欢
    • 2021-10-08
    • 2019-04-12
    • 2021-05-17
    • 2021-08-08
    • 1970-01-01
    • 2014-12-29
    • 2019-04-10
    • 2023-01-10
    • 2015-11-06
    相关资源
    最近更新 更多