如何过滤前N个项目的groupby

时间:2015-10-21 19:30:37

标签: python pandas

在Pandas中,如何将groupby修改为只取组中的前N项?

示例

df = pd.DataFrame({'id': [1, 1, 1, 2, 2, 2, 2], 
                   'values': [1, 2, 3, 4, 5, 6, 7]})
>>> df
   id  values
0   1       1
1   1       2
2   1       3
3   2       4
4   2       5
5   2       6
6   2       7

所需功能

# This doesn't work, but I am trying to return the first two items per group.
>>> df.groupby('id').first(2)  
   id  values
0   1       1
1   1       2
3   2       4
4   2       5

我尝试了什么

我可以执行groupby并遍历组以获取第一个n值的索引,但必须有一个更简单的解决方案。

n = 2  # First two rows.
idx = [i for group in df.groupby('id').groups.itervalues() for i in group[:n]]
>>> df.ix[idx]
   id  values
0   1       1
1   1       2
3   2       4
4   2       5

1 个答案:

答案 0 :(得分:3)

您可以使用head

In [11]: df.groupby("id").head(2)
Out[11]:
   id  values
0   1       1
1   1       2
3   2       4
4   2       5

注意:在旧版本中,这曾经等同于.apply(pd.DataFrame.head),但是自0.15(?)以来效率更高,现在它使用了cumcount