我有这样一个 Dataframe :
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
我想对列'pidx'
执行groupby
操作,然后在每个组(即每个pidx
)中按降序对score
进行排序
然后select head(2)
,即每组的前2个。
我寻找的结果是这样的:
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
我尝试的是:
df.sort(['pidx','score'],ascending = False).groupby('pidx').head(2)
这个方法看起来是可行的,但是我不知道如果在一个巨大的数据集上工作,这个方法是否正确。我还可以使用什么其他最好的方法来得到这样的结果呢?
3条答案
按热度按时间uxhixvfz1#
有两种解决方案:
sort_values
和聚合head
:set_index
和聚合nlargest
:icomxhvb2#
一个简单的解决方案是:
希望能有所帮助!
c86crjj03#
另一种方法是对每个组中的分数进行排名,并过滤每个组中分数排名前2的行。