如何从大量学生成绩数据中获取前 N 名最高分者的姓名?

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

分数 学生姓名
35 Lily
45 Rex
20 Cameron
45 Max
20 Jasmin

在文本文件中,分数和姓名之间由两个空格分隔,每行有一个分数-姓名条目

此 .txt 文件无法一次性加载到内存中。

如何在 Python 中获取前 N 名最高分者?
注意:N 的值可能非常大

例如:
当 N=2 时,

输出应为:
Rex
Max

有没有一种方法可以直接在 Python 中获取前 N 名分数者,而无需将整个数据再次保存为另一种文件格式?

哪种方法更有效?
1.) 逐一读取分数条目并保存/更新最大的 N 个分数条目?
2.) 将所有数据移到 pandas 数据框并使用 nlargest?


回答:

要将文本文件读取到 pandas DataFrame 中,答案在这里:这里
然后您可以尝试以下方法:您可以尝试使用 pandas nlargest。例如,您可以这样做:

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

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

import numpy as nplargest = 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.588964223861694313.23700284957885719.69099760055542

因此,最有效的方法是使用nlargest

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注