如何获得最大的行而不进行排序?

时间:2018-11-27 13:45:51

标签: python-3.x pandas

我需要提取熊猫df的n个最小的行,但是对我来说,保持行的原始顺序非常重要。

代码示例:

import pandas as pd
df = pd.DataFrame({
    'a': [1, 10, 8, 11, -1],
    'b': list('abdce'),
    'c': [1.0, 2.0, 1.5, 3.0, 4.0]})
df.nsmallest(3, 'a')

礼物:

   a  b    c
4 -1  e  4.0
0  1  a  1.0
2  8  d  1.5

我需要:

   a  b    c
0  1  a  1.0
2  8  d  1.5
4 -1  e  4.0

任何想法该怎么做?

PS!在我的实际示例中,索引不是排序/可排序的,因为它们是字符串(名称)。

1 个答案:

答案 0 :(得分:4)

最简单的方法是假设索引在开头进行排序

df.nsmallest(3, 'a').sort_index()

   a  b    c
0  1  a  1.0
2  8  d  1.5
4 -1  e  4.0

或者用np.argpartitioniloc

取决于对索引的排序。强调文本

df.iloc[np.sort(df.a.values.argpartition(3)[:3])]

   a  b    c
0  1  a  1.0
2  8  d  1.5
4 -1  e  4.0