
本文旨在介绍如何使用 Pandas 库,针对 DataFrame 数据,按照特定类别进行分组,并选取每个类别中排序靠前的 N 行数据。通过 groupby() 和 head() 函数的配合使用,可以高效地实现这一目标,从而方便进行数据筛选和分析。本文将提供详细的代码示例和解释,帮助读者掌握这一实用技巧。
在数据分析任务中,经常需要根据某些类别对数据进行分组,并选取每个类别中具有代表性的数据子集。例如,在一个包含学生姓名、科目和分数的 DataFrame 中,我们可能需要选取每个科目中成绩最高的几位学生。Pandas 库提供了强大的 groupby() 方法和 head() 方法,可以轻松实现这一目标。
以下代码演示了如何使用 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)代码解释:
输出结果:
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' 只有一行)。
如果需要根据特定列的值进行排序后再选取 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)代码解释:
输出结果:
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 行数据。
本文介绍了如何使用 Pandas 的 groupby() 和 head() 函数,以及 sort_values() 函数,对 DataFrame 数据进行分组并选取每个类别中的 Top N 行数据。这些技巧在数据分析和处理中非常实用,可以帮助用户快速筛选和分析数据。通过灵活运用这些方法,可以高效地解决各种数据处理问题。
以上就是从 Pandas DataFrame 中按类别选取 Top N 行的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号