如何在pandas中选择每组的前3行?

ink*_*kzk 5 python pandas

我得到一个像这样的熊猫数据框:

    id   prob
0    1   0.5   
1    1   0.6
2    1   0.4
3    1   0.2
4    2   0.3
6    2   0.5
...
Run Code Online (Sandbox Code Playgroud)

我想按“id”对其进行分组,按降序排序并获得每组的前 3 个概率。请注意,某些组包含少于 3 的行。最后我想得到一个二维数组,如:

[[1, 0.6, 0.5, 0.4], [2, [0.5, 0.3]]...]
Run Code Online (Sandbox Code Playgroud)

我怎么能用熊猫做到这一点?谢谢!

Sco*_*ton 4

使用sort_valuesgroupby、 和head

df.sort_values(by=['id','prob'], ascending=[True,False]).groupby('id').head(3).values
Run Code Online (Sandbox Code Playgroud)

输出:

array([[ 1. ,  0.6],
       [ 1. ,  0.5],
       [ 1. ,  0.4],
       [ 2. ,  0.5],
       [ 2. ,  0.3]])
Run Code Online (Sandbox Code Playgroud)

关注@COLDSPEED 线索:

df.sort_values(by=['id','prob'], ascending=[True,False])\
  .groupby('id').agg(lambda x: x.head(3).tolist())\
  .reset_index().values.tolist()
Run Code Online (Sandbox Code Playgroud)

输出:

[[1, [0.6, 0.5, 0.4]], [2, [0.5, 0.3]]]
Run Code Online (Sandbox Code Playgroud)