在pandas中,DataFrame是我们经常使用的一个工具。有时,我们可能需要将数据按照某个字段进行分组,然后每组取N项。例如:现在,我想为每个职位取三个用户。相信有同学会用for循环依次循环遍历每一行,每个位置选择3个位置,存入一个临时列表中。循环完成后,转换成新的DataFrame。但是这个方法显然不够聪明。那么,有没有什么方法可以不使用循环来做到这一点呢?可能有些同学想到了用groupby。让我们看看效果。看起来它只是在计算每个位置的数量。那么,我们如何保留所有字段呢?我们其实可以把.size()改成.head(3):好像这里的.head(3)好像没有什么作用。这个时候,我们用Python来想一想。如果要使用itertools.groupby,官方文档中有一段话:一般情况下,iterableneedstoalreadybesortedonsamekeyfunction。如下图所示:这段话告诉我们,要使用itertools.groupby,我们需要提前对被分组的字段进行排序。那么,让我们试试如果我们提前对DataFrame进行排序然后进行分组会发生什么:它起作用了。每个位置取3个。你可能会发现最左边的索引乱序了,看起来不太好。那么我们也可以重新设置索引:至此,问题完美解决。本文转载自微信公众号“闻所未闻的密码”,可通过以下二维码关注。转载本文请联系Code公众号。
