首页 > 解决方案 > 如何在没有排序的情况下获得最大的行?

问题描述

我需要提取 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!在我的真实示例中,索引未排序/可排序,因为它们是字符串(名称)。

标签: python-3.xpandas

解决方案


假设索引在开始时排序的最简单方法

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

推荐阅读