为什么DataFrame.nlargest没有对结果进行排序?

时间:2018-03-30 09:56:30

标签: python pandas

以下是Pandas文档v0.22.0中的示例:

In [330]: df = pd.DataFrame({'a': [-2, -1, 1, 10, 8, 11, -1],
                             'b': list('abdceff'),
                             'c': [1.0, 2.0, 4.0, 3.2, np.nan, 3.0, 4.0]})

In [332]: df.nlargest(5, ['a', 'c'])
Out[332]: 
     a  b    c
 6  -1  f  4.0
 5  11  f  3.0
 3  10  c  3.2
 4   8  e  NaN
 2   1  d  4.0

为什么结果不先由'a'然后按'c'排序?

同时,对单列应用nlargest()始终对结果进行排序:

df.nlargest(5,['a'])
Out[110]: 
     a  b    c
5  11.0  f  3.0
3  10.0  c  3.2
4   8.0  e  NaN
2   1.0  d  4.0
1  -1.0  b  2.0

1 个答案:

答案 0 :(得分:2)

这不是错误,但预计会检查here

  

nlargest 不对值进行排序(这是为什么它更快的一部分)。

     

您可以事后排序。

In [32]: df.sort_values(['a', 'c'], ascending=False).head(5)
Out[32]:
    a  b    c
5  11  f  3.0
3  10  c  3.2
4   8  e  NaN
2   1  d  4.0
6  -1  f  4.0

In [33]: df.nlargest(5, ['a', 'c']).sort_values(['a', 'c'], ascending=False)
Out[33]:
    a  b    c
5  11  f  3.0
3  10  c  3.2
4   8  e  NaN
2   1  d  4.0
6  -1  f  4.0