从其他列pandas中分组一列和前N.

时间:2017-09-26 06:44:59

标签: pandas

我有一个df:

main_id    b_code    Scores
  1          ABC      0.56
  1          ABC      0.21
  1          BCD      0.7
  1          QWE      0.3
  1          ZXC      0.8
  2          ABC      0.26
  2          ABC      0.81
  2          BCD      0.24
  2          QWE      0.87
  2          ZXC      0.43

我必须为每个main_id找到前2个b_code,具体取决于他们的分数。

我的最终结果应该是:

main_id    b_code   Scores
1           ZXC      0.8
1           ABC      0.56
2           QWE      0.87
2           ABC      0.81

我尝试使用groupby和nlargest,但结果是错误的。

1 个答案:

答案 0 :(得分:2)

您可以使用sort_values + groupby + GroupBy.head

df = df.sort_values(['main_id','Scores'], ascending=[True,False]).groupby('main_id').head(2)
print (df)
   main_id b_code  Scores
4        1    ZXC    0.80
2        1    BCD    0.70
8        2    QWE    0.87
6        2    ABC    0.81

set_index所有列中没有main_idScores + groupby + nlargest + reset_index

df = df.set_index('b_code').groupby('main_id')['Scores'].nlargest(2).reset_index()
print (df)
   main_id b_code  Scores
0        1    ZXC    0.80
1        1    BCD    0.70
2        2    QWE    0.87
3        2    ABC    0.81