如何按特定组的行数过滤数据集?

How to filter dataset by number of rows of specific group?

我有一个数据集:

id     value
a1      14
a1      2
a1      34
a1      11
a1      78
b1      11
b1      9
b1      6

我想按每个组的行数过滤该数据集,使其不超过 4。因此所需的输出将是:

id     value
a1      14
a1      2
a1      34
a1      11
b1      11
b1      9
b1      6

怎么做?

您可以使用 groupby.head:

out = df.groupby('id').head(4)

如果您有 pandas >=1.4.0,那么您也可以使用 groupby.nth 进行切片:

out = df.groupby('id').nth[:4]

输出

   id  value
0  a1     14
1  a1      2
2  a1     34
3  a1     11
5  b1     11
6  b1      9
7  b1      6