如何获得 Pandas 中排名前 5 的密集行?
How to get top 5 dense ranked rows in Pandas?
所以我试着让它工作。我知道如何排序,使用 nlargest 或使用 rank with method dense..但不知何故我还是迷路了。
这是我想要实现的目标:
- 我总是希望根据某个值 (1, 2, 3) 获得前 3 行
- 但是,如果有多行具有相同的值,那么我想要超过 3 行(例如 1,2,2,3 应该 return 4 行)
假设我有这个数据
我想select top3 rows based on the lowest score 我想得到这个
正如我所说,我想要前3行,但如果有相同的分数,应该得到4个或更多。
我在尝试的所有组合中都迷失了一点。有没有简单的方法可以做到这一点?
您可以创建一个包含 Score 列中 3 个最小值的数组,然后使用 isin
过滤您的数据框:
some_vals = pd.Series(df['Score'].unique()).nsmallest(3).values
df[df['Score'].isin(some_vals)]
Name Score
0 John 1
1 Mark 2
2 Perry 2
3 Dion 3
通过这种方式,您可以确保返回所有 Score 中的值等于 3 个最小值中的任何一个的名称。
所以我试着让它工作。我知道如何排序,使用 nlargest 或使用 rank with method dense..但不知何故我还是迷路了。
这是我想要实现的目标:
- 我总是希望根据某个值 (1, 2, 3) 获得前 3 行
- 但是,如果有多行具有相同的值,那么我想要超过 3 行(例如 1,2,2,3 应该 return 4 行)
假设我有这个数据
我想select top3 rows based on the lowest score 我想得到这个
正如我所说,我想要前3行,但如果有相同的分数,应该得到4个或更多。
我在尝试的所有组合中都迷失了一点。有没有简单的方法可以做到这一点?
您可以创建一个包含 Score 列中 3 个最小值的数组,然后使用 isin
过滤您的数据框:
some_vals = pd.Series(df['Score'].unique()).nsmallest(3).values
df[df['Score'].isin(some_vals)]
Name Score
0 John 1
1 Mark 2
2 Perry 2
3 Dion 3
通过这种方式,您可以确保返回所有 Score 中的值等于 3 个最小值中的任何一个的名称。