Python 根据列中的值,为每个值提取前N行

Python 根据列中的值,为每个值提取前N行,python,pandas,Python,Pandas,在python中使用pandas或其他函数 我想为每个“名称”提取前3行(基于“权重”值): 例如,我有这样的数据 df = row weight name size1 size2 1 10 A 4 4 2 7 A 2 7 3 5 A 9 7 4 5 A 2 2 5 2 A 6 3 1 7 B 3 4 2 6 B 8 3 3 5 B 4 3 4 3 B 4 5 5 2 B 2 1 我希望我的输出如下所示

在python中使用pandas或其他函数

我想为每个“名称”提取前3行(基于“权重”值):

例如,我有这样的数据

    df = 
row weight name size1 size2 
    1 10 A 4 4
    2 7 A 2 7
    3 5 A 9 7
    4 5 A 2 2
    5 2 A 6 3
    1 7 B 3 4
    2 6 B 8 3
    3 5 B 4 3
    4 3 B 4 5
    5 2 B 2 1
我希望我的输出如下所示:

row weight name size1 size2
1 10 A 4 4
2 7 A 2 7
3 5 A 9 7
1 7 B 3 4
2 6 B 8 3
3 5 B 4 3

试试这个:

In [36]: df.groupby('name', group_keys=False).apply(lambda x: x.nlargest(3, 'weight'))
Out[36]:
   row  weight name  size1  size2
0    1      10    A      4      4
1    2       7    A      2      7
2    3       5    A      9      7
5    1       7    B      3      4
6    2       6    B      8      3
7    3       5    B      4      3
In [36]: df.groupby('name', group_keys=False).apply(lambda x: x.nlargest(3, 'weight'))
Out[36]:
   row  weight name  size1  size2
0    1      10    A      4      4
1    2       7    A      2      7
2    3       5    A      9      7
5    1       7    B      3      4
6    2       6    B      8      3
7    3       5    B      4      3