python partition by组内排序并取前n

import pandas as pd
import numpy as np
dic={'科目':['语文','语文','语文','语文','数学','数学','数学','数学','英语','英语','英语','英语'],
         '姓名':['赵大','钱二','孙三','李四','周五','郑六','王七','朱八','小红','小明','小李','小王'],
         '分数':[95,84,93,88,91,93,84,85,94,93,83,87]}
data=pd.DataFrame(dic)#转为DataFrame
data['rank'] = data.groupby('科目')['分数'].rank(ascending = False)
print(data)
print("*"*60)
data_select=data[data['rank']<=2]
print(data_select)

 

 科目  姓名  分数  rank
0   语文  赵大  95   1.0
1   语文  钱二  84   4.0
2   语文  孙三  93   2.0
3   语文  李四  88   3.0
4   数学  周五  91   2.0
5   数学  郑六  93   1.0
6   数学  王七  84   4.0
7   数学  朱八  85   3.0
8   英语  小红  94   1.0
9   英语  小明  93   2.0
10  英语  小李  83   4.0
11  英语  小王  87   3.0
************************************************************
   科目  姓名  分数  rank
0  语文  赵大  95   1.0
2  语文  孙三  93   2.0
4  数学  周五  91   2.0
5  数学  郑六  93   1.0
8  英语  小红  94   1.0
9  英语  小明  93   2.0

Process finished with exit code 0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值