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中文网其他相关文章!