在学生成绩的大数据集中,如何获得N个最高分学生的名字?



我有一个.txt文件,其中包含一个大型数据集(超过9000万个条目),格式如下:

成绩tbody> <<tr>45204520
学生名
35莉莉
雷克斯
卡梅隆
Max
茉莉花

要将文本文件读入pandasDataFrame,答案在这里。
那么你可以试试下面的方法:您可以尝试使用pandasnlargest。例如:

largest = df.nlargest(n,'score')['Student Name']

您也可以将score列转换为Numpy数组,并使用argsort

import numpy as np
largest = df.iloc[np.argsort(-df['score'])[:n]]['Student Name']

此外,您可以尝试对DataFrame进行排序,并取前n行,如下所示:

largest = df.sort_values('score', ascending=False).iloc[:n]['Student Name']

下面是一个有1亿条记录的DataFrame和n=1000000运行时的比较

df = pd.DataFrame(np.random.randint(0, 100, size=(100000000, 2)),  columns=['score', 'Student Name'])
n = 1000000
start = time()
temp = df.nlargest(n, 'score')['Student Name']
print(time() - start)
start = time()
temp2 = df.iloc[np.argsort(-df['score'])[:n]]['Student Name']
print(time() - start)
start = time()
temp3 = df.sort_values('score', ascending=False).iloc[:n]['Student Name']
print(time() - start)

将:

3.5889642238616943
13.237002849578857
19.69099760055542
所以最有效的方法是使用nlargest

最新更新