我正在使用包含20K行的数据框。 我创建了一个示例数据框,如下所示以复制数据框。
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]
我想通过使用groupby(['Competition','Team'])
通过使用以下transform(max),我可以使得分最高的行保持不变:
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
您也可以参考下面的图片以获得预期的输出:
有人可以建议如何做吗? 谢谢,
Zep
答案 0 :(得分:2)
groupby
团队和竞争,然后使用.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