从df列中获得相对于另一列值的前2个得分

时间:2018-10-19 18:44:21

标签: python python-3.x pandas

我的df:

  parent child       score

0   O    Tel         0.294015
1   O    The         0.296218
2   O    Tri         0.306937
3   O    nal         0.290132
4   O    rap         0.298493

5   PV   Aer         0.297987
6   PV   Arc         0.277228
7   PV   Bro         0.301921
8   PV   CAS         0.286482

我想要:

0   O    Tri         0.306937
1   O    rap         0.298493
2   PV   Aer         0.297987
3   PV   Bro         0.301921

需要获得父母与孩子的前2名得分, 不是多索引的。

2 个答案:

答案 0 :(得分:2)

这里只有一个班轮可以做到这一点-还要考虑到父母只有一个孩子的情况。

df.groupby('parent').apply(lambda df: df.sort_values('score', ascending=False).iloc[:2] if len(df) > 1 else df)

答案 1 :(得分:2)

使用tail

df.sort_values(['parent','score']).groupby('parent').tail(2)
Out[932]: 
  parent child     score
4      O   rap  0.298493
2      O   Tri  0.306937
5     PV   Aer  0.297987
7     PV   Bro  0.301921