热线电话:13121318867

登录
2018-11-14 阅读量: 1063
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

0.0000
6
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子