Python 从数据框中选择行,考虑列的重复值

Python 从数据框中选择行,考虑列的重复值,python,pandas,dataframe,Python,Pandas,Dataframe,考虑以下示例(针对问题)数据帧: df1=pd.DataFrame({'ID':[91,2,33,41,56,78,910,331],'Score':[97,91,92,84,95.6,92,89,90]}) 我有一个用df1作为参数之一调用的函数。除此之外,函数需要在按分数排序后返回前n行(例如,在本例中为3行): def sortandextract(df1,n1,...): ... df1.sort_values(by=['Score'], ascending=[Fals

考虑以下示例(针对问题)数据帧:

df1=pd.DataFrame({'ID':[91,2,33,41,56,78,910,331],'Score':[97,91,92,84,95.6,92,89,90]})
我有一个用df1作为参数之一调用的函数。除此之外,函数需要在按分数排序后返回前n行(例如,在本例中为3行):

def sortandextract(df1,n1,...):
    ...
    df1.sort_values(by=['Score'], ascending=[False],inplace=True)
    df2=df1[:n1]
    ...
    return(df2,len(df2))
使用不同的DF1多次调用此函数(这些数据帧有数百行)。有时,分数会重复(如上所述),有时则不会

我想要一个pythonic方法来返回n1+k行(其中k是score列中最后一个分数重复的次数)。在上面的示例中,如果要执行函数调用,我将遇到一个问题:

sortandextract(df1,3)

我希望此函数调用返回4行。

我们可以执行
rank

n=3
ret=df1[df1.Score.rank(method='min',ascending=False)<=n]
   ID  Score
0  91   97.0
2  33   92.0
4  56   95.6
5  78   92.0
n=3

ret=df1[df1.Score.rank(method='min',升序=False)谢谢。我对使用.Score感到不安。我的一些名为的列中有空格。有没有更可靠的方法来做到这一点?@user2751530只需使用
df1['Score']
。是的,@user2751530坚持使用['column name']约定而不是点符号是明智的。