詹惠儿

2018-11-14   阅读量: 835

数据分析师 Python编程 Python爬虫

pandas中的groupby如何过滤最多3个计数

扫码加入数据分析学习群

数据:

以下创建了一个包含200000行的示例数据框,:

df = pd.DataFrame()
df [
'Team'] = ['A1','A1','A1','A2','A2','A2','B1','B1','B1','B2','B2','B2']
df [
'Competition'] = ['L1','L1','L1','L1','L1','L1','L2','L2','L2','L2','L2','L2']
df [
'Score_count'] = [2,1,3,4,7,8,1,5,8,5,7,1]

问题:

我想通过使用保持两个最大值Score_count的行 groupby(['Competition','Team'])

我可以通过使用transform(max)来保持具有最大Score_count的行,如下所示:

idx = df.groupby(['Competition','Team'])['Score_count'].transform(max) == df['Score_count']
df = df[idx]

但我想要做的是保持同一组的n个最大值(在这种情况下是两个最大值)Score_count

以下是我的预期输出:

       Team     Competition  Score_count
0 A1 L1 3
1 A1 L1 2
2 A2 L1 8
3 A2 L1 7
4 B1 L2 8
5 B1 L2 5
6 B2 L2 7
7 B2 L2 5

同时也可以参考下面的图片了解预期的输出:

在此处输入图像描述


groupby Team,Competition ,然后采取两个最大的价值.nlargest
df.groupby(['Team', 'Competition']).Score_count.nlargest(2).reset_index([0,1])

# Team Competition Score_count
#2 A1 L1 3
#0 A1 L1 2
#5 A2 L1 8
#4 A2 L1 7
#8 B1 L2 8
#7 B1 L2 5
#10 B2 L2 7
#9 B2 L2 5

要删除原始索引:

df.groupby(['Team', 'Competition']).Score_count.nlargest(2).reset_index([0,1]).reset_index(drop=True)

# Team Competition Score_count
#0 A1 L1 3
#1 A1 L1 2
#2 A2 L1 8
#3 A2 L1 7
#4 B1 L2 8
#5 B1 L2 5
#6 B2 L2 7
#7 B2 L2 5

添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
0.0000 0 6 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子