数据:
以下创建了一个包含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








暂无数据