0

0

从 Pandas DataFrame 中按类别选取 Top N 行

碧海醫心

碧海醫心

发布时间:2025-08-14 17:38:19

|

732人浏览过

|

来源于php中文网

原创

从 pandas dataframe 中按类别选取 top n 行

本文旨在介绍如何使用 Pandas 库,针对 DataFrame 数据,按照特定类别进行分组,并选取每个类别中排序靠前的 N 行数据。通过 groupby() 和 head() 函数的配合使用,可以高效地实现这一目标,从而方便进行数据筛选和分析。本文将提供详细的代码示例和解释,帮助读者掌握这一实用技巧。

在数据分析任务中,经常需要根据某些类别对数据进行分组,并选取每个类别中具有代表性的数据子集。例如,在一个包含学生姓名、科目和分数的 DataFrame 中,我们可能需要选取每个科目中成绩最高的几位学生。Pandas 库提供了强大的 groupby() 方法和 head() 方法,可以轻松实现这一目标。

使用 groupby() 和 head() 选取 Top N 行

以下代码演示了如何使用 groupby() 和 head() 函数选取每个类别中的前 N 行数据。

import pandas as pd

# 创建示例 DataFrame
data = [['Tom', 'A', 10], ['Jack', 'A', 9], ['Andy', 'A', 8],
        ['Lily', 'A', 7], ['Johan', 'B', 10], ['Ewa', 'B', 9],
        ['Alice', 'B', 8], ['Bob', 'B', 7], ['Charlie', 'C', 10]]

df = pd.DataFrame(data, columns=['Name', 'Category', 'Score'])

# 按照 'Category' 列进行分组,并选取每个类别的前 3 行
top3_category = df.groupby('Category').head(3)

# 打印结果
print(top3_category)

代码解释:

  1. import pandas as pd: 导入 Pandas 库,并将其命名为 pd。
  2. data = [...]: 定义一个包含姓名、类别和分数的列表。
  3. df = pd.DataFrame(data, columns=['Name', 'Category', 'Score']): 使用列表 data 创建一个 DataFrame,并指定列名为 'Name', 'Category', 'Score'。
  4. df.groupby('Category'): 使用 'Category' 列对 DataFrame 进行分组。groupby() 方法返回一个 DataFrameGroupBy 对象。
  5. .head(3): 对每个分组,选取前 3 行数据。head(n) 方法返回每个分组的前 n 行数据。如果分组中的行数少于 n,则返回分组中的所有行。
  6. print(top3_category): 打印结果 DataFrame,其中包含每个类别的前 3 行数据。

输出结果:

    Name Category  Score
0    Tom        A     10
1   Jack        A      9
2   Andy        A      8
4  Johan        B     10
5    Ewa        B      9
6  Alice        B      8
8  Charlie        C     10

可以看到,结果 DataFrame 包含了类别 'A' 的前 3 行,类别 'B' 的前 3 行,以及类别 'C' 的所有行(因为类别 'C' 只有一行)。

AI改图神器
AI改图神器

AI万能图片编辑器,一键抠图,去水印,智能图片美化,照片转漫画,照片变活转视频,图片无损放大,一键背景虚化,位图智能转矢量图

下载

进阶用法:结合 sort_values() 排序后选取

如果需要根据特定列的值进行排序后再选取 Top N 行,可以结合 sort_values() 方法。

import pandas as pd

# 创建示例 DataFrame
data = [['Tom', 'A', 10], ['Jack', 'A', 9], ['Andy', 'A', 8],
        ['Lily', 'A', 7], ['Johan', 'B', 10], ['Ewa', 'B', 9],
        ['Alice', 'B', 8], ['Bob', 'B', 7], ['Charlie', 'C', 10]]

df = pd.DataFrame(data, columns=['Name', 'Category', 'Score'])

# 按照 'Category' 分组,并在每个组内按照 'Score' 降序排序,然后选取前 2 行
top2_by_score = df.groupby('Category').apply(lambda x: x.sort_values('Score', ascending=False).head(2))

# 打印结果
print(top2_by_score)

代码解释:

  1. df.groupby('Category').apply(...): 对 DataFrame 按照 'Category' 列进行分组,并对每个分组应用一个函数。
  2. lambda x: x.sort_values('Score', ascending=False).head(2): 定义一个匿名函数,该函数接收一个分组 x 作为输入,首先使用 sort_values('Score', ascending=False) 按照 'Score' 列进行降序排序,然后使用 head(2) 选取排序后的前 2 行。

输出结果:

       Name Category  Score
Category
A      0    Tom        A     10
       1   Jack        A      9
B      4  Johan        B     10
       5    Ewa        B      9
C      8  Charlie        C     10

可以看到,结果 DataFrame 包含了每个类别中 'Score' 最高的 2 行数据。

注意事项

  • groupby() 方法返回的是 DataFrameGroupBy 对象,需要结合其他方法(如 head(), apply(), agg() 等)才能得到最终结果。
  • head(n) 方法返回每个分组的前 n 行数据。如果分组中的行数少于 n,则返回分组中的所有行。
  • 使用 apply() 方法时,需要注意性能问题。对于大型 DataFrame,建议使用 Pandas 内置的聚合函数或矢量化操作来提高效率。
  • 在使用 sort_values() 方法时,需要注意排序的顺序(升序或降序)。

总结

本文介绍了如何使用 Pandas 的 groupby() 和 head() 函数,以及 sort_values() 函数,对 DataFrame 数据进行分组并选取每个类别中的 Top N 行数据。这些技巧在数据分析和处理中非常实用,可以帮助用户快速筛选和分析数据。通过灵活运用这些方法,可以高效地解决各种数据处理问题。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

51

2025.12.04

python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

184

2023.09.27

lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

202

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

189

2025.11.08

Python lambda详解
Python lambda详解

本专题整合了Python lambda函数相关教程,阅读下面的文章了解更多详细内容。

41

2026.01.05

数据分析的方法
数据分析的方法

数据分析的方法有:对比分析法,分组分析法,预测分析法,漏斗分析法,AB测试分析法,象限分析法,公式拆解法,可行域分析法,二八分析法,假设性分析法。php中文网为大家带来了数据分析的相关知识、以及相关文章等内容。

460

2023.07.04

数据分析方法有哪几种
数据分析方法有哪几种

数据分析方法有:1、描述性统计分析;2、探索性数据分析;3、假设检验;4、回归分析;5、聚类分析。本专题为大家提供数据分析方法的相关的文章、下载、课程内容,供大家免费下载体验。

274

2023.08.07

网站建设功能有哪些
网站建设功能有哪些

网站建设功能包括信息发布、内容管理、用户管理、搜索引擎优化、网站安全、数据分析、网站推广、响应式设计、社交媒体整合和电子商务等功能。这些功能可以帮助网站管理员创建一个具有吸引力、可用性和商业价值的网站,实现网站的目标。

722

2023.10.16

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

77

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 11.4万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.1万人学习

NumPy 教程
NumPy 教程

共44课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号