返回pandas数据帧中的n个最大/最小值,其中许多行包含相同的值

时间:2017-02-28 19:42:10

标签: python pandas

我想知道如何在数据框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个最小计数的所有行。在熊猫中有没有更简单的方法呢?提前谢谢!

2 个答案:

答案 0 :(得分:4)

您可以先drop_duplicates nsmallest查找值,然后boolean indexingisin

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排序(因为uniquenumpy 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
相关问题