我想知道如何在数据框df中返回包含n个最小值的行,如下所示。
id xx count
1 A 1
2 B 1
3 C 3
4 D 2
5 E 3
6 F 10
7 G 11
8 H 17
说我想找到包含3个最小计数的行(在这种情况下,3个最小计数是1,2和3)。所以,我希望答案是这样的:
id xx count
1 A 1
2 B 1
4 D 2
3 C 3
5 E 3
如果我只是根据计数对数据帧进行排序并使用df.nsmallest(3, 'count')
,那么它只会返回所需数据帧的前三行。但我想要包含3个最小计数的所有行。在熊猫中有没有更简单的方法呢?提前谢谢!
答案 0 :(得分:4)
您可以先drop_duplicates
nsmallest
查找值,然后boolean indexing
加isin
:
s = df['count'].drop_duplicates().nsmallest(3)
print (s)
0 1
3 2
2 3
Name: count, dtype: int64
print (df[df['count'].isin(s)])
id xx count
0 1 A 1
1 2 B 1
2 3 C 3
3 4 D 2
4 5 E 3
使用unique
的另一个解决方案,按numpy.sort
排序(因为unique
中numpy array
的输出)并选择前3个值:
arr = np.sort(df['count'].unique())[:3]
print (arr)
[1 2 3]
print (df[df['count'].isin(arr)])
id xx count
0 1 A 1
1 2 B 1
2 3 C 3
3 4 D 2
4 5 E 3
答案 1 :(得分:2)
另一种解决方案 - 使用rank()方法:
In [43]: df[df['count'].rank(method='dense') <= 3]
Out[43]:
id xx count
0 1 A 1
1 2 B 1
2 3 C 3
3 4 D 2
4 5 E 3