我想知道如何在看起来像这样的数据帧 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 个最小计数的所有行。在熊猫中有没有更简单的方法来做到这一点?提前致谢!
您可以首先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)