首页 >后端开发 >Python教程 >如何高效地提取 Pandas DataFrame 中每组的前 N ​​条记录?

如何高效地提取 Pandas DataFrame 中每组的前 N ​​条记录?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-28 06:19:13931浏览

How Can I Efficiently Extract the Top N Records from Each Group in a Pandas DataFrame?

Pandas:高效提取每组中的前几条记录

获取 DataFrame 中每组中的前几条记录是数据操作中的常见任务。本文介绍了实现此目标的多种方法,包括受 SQL 窗口函数启发的解决方案。

问题陈述:
给定一个带有分组列和值列的 DataFrame,我们想要提取每个组的前 n 条记录。

使用分组和行的朴素方法编号:
解决此问题的一种方法是应用分组操作,然后采用类似窗口函数的方法。这涉及到向每个组中的每条记录添加行号,然后根据该行号过滤顶部行。

实用解决方案:
更有效的解决方案包括使用分组 DataFrame 上的 head() 方法。默认情况下,head() 返回每组中的前 n 条记录。这与获取最高记录的目标非常吻合。

df.groupby('id').head(2)

删除 MultiIndex:
要删除分组操作引入的 MultiIndex,我们使用reset_index(drop=True):

df.groupby('id').head(2).reset_index(drop=True)

输出:

   id  value
0   1      1
1   1      2
2   2      1
3   2      2
4   3      1
5   4      1

优雅的行编号方法:
虽然Python缺少row_number()函数对于 SQL,我们可以使用 groupby() 和 cumcount() 的组合来复制其功能。具体方法如下:

df['row_num'] = df.groupby('id').cumcount() + 1

此方法在每个组内分配唯一的行号,而无需引入额外的列或多重索引。

以上是如何高效地提取 Pandas DataFrame 中每组的前 N ​​条记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn