Tri des colonnes et la sélection des top n lignes dans chaque groupe de pandas dataframe

J'ai un dataframe comme ceci:

mainid  pidx    pidy   score
  1      a        b      2
  1      a        c      5
  1      c        a      7
  1      c        b      2
  1      a        e      8
  2      x        y      1
  2      y        z      3
  2      z        y      5
  2      x        w      12
  2      x        v      1
  2      y        x      6   

Je veux groupby on column 'pidx' et puis sort score in descending order in each group je.e pour chaque pidx

et puis select head(2) je.e dans le top 2 de chaque groupe.

Le résultat que je cherche, c'est comme ceci:

mainid   pidx    pidy    score
  1        a      e        8
  1        a      c        5
  1        c      a        7
  1        c      b        2
  2        x      w        12
  2        x      y        1
  2        y      x        6
  2        y      z        3
  2        z      y        5

Ce que j'ai essayé était:

df.sort(['pidx','score'],ascending = False).groupby('pidx').head(2) 

et cela semble fonctionner, mais je ne sais pas si c'est la bonne approche si l'on travaille sur un grand ensemble de données. Quelle autre meilleure méthode puis-je utiliser pour obtenir un tel résultat?

InformationsquelleAutor Shubham | 2017-01-24