我需要提取熊猫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!在我的实际示例中,索引不是排序/可排序的,因为它们是字符串(名称)。
答案 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.argpartition
和iloc
此 取决于对索引的排序。强调文本
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