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

Gin*_*ead 2 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
Run Code Online (Sandbox Code Playgroud)

假设我想找到包含 3 个最小计数的行(在这种情况下,3 个最小计数是 1,2 和 3)。所以,我希望答案是这样的:

id           xx             count
    1            A              1
    2            B              1
    4            D              2
    3            C              3
    5            E              3
Run Code Online (Sandbox Code Playgroud)

如果我只是根据 count 和 use 对数据帧进行排序df.nsmallest(3, 'count'),它只会返回所需数据帧的前三行。但我想要包含 3 个最小计数的所有行。在熊猫中有没有更简单的方法来做到这一点?提前致谢!

jez*_*ael 5

您可以首先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
Run Code Online (Sandbox Code Playgroud)

另一个解决方案unique,排序依据numpy.sort(因为uniquein 的输出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
Run Code Online (Sandbox Code Playgroud)