Python 提取三个最大的值并将其放置到不同的列中

Python 提取三个最大的值并将其放置到不同的列中,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个棒球运动员和他们效力的球队的数据库。数据帧可以简化如下: df=pd.DataFrame({'teamID':['abc01','abc02','abc02'],'playerID':['p1','p2','p1'],'score':[10,10,10]}) 现在我想添加三列,分别显示所有球员的第一、第二和第三高得分,但按他们所踢的球队分组。特别是,我希望最终的表格如下所示: teamID first second last abc01 10 10

我有一个棒球运动员和他们效力的球队的数据库。数据帧可以简化如下:

df=pd.DataFrame({'teamID':['abc01','abc02','abc02'],'playerID':['p1','p2','p1'],'score':[10,10,10]})
现在我想添加三列,分别显示所有球员的第一、第二和第三高得分,但按他们所踢的球队分组。特别是,我希望最终的表格如下所示:

teamID  first   second  last
abc01   10         10       10
abc02   10         8        1
abc03
...     
...
zzz0z

我试过几种方法,但问题似乎有点复杂。有人能给我一个提示吗?

首先按每多列排序值、按创建计数器列、按筛选top3和按重塑形状:

df=df.sort_值(['teamID','score',升序=[True,False])
df['g']=df.groupby('teamID').cumcount()
df=df[df['g']<3]
df=df.pivot('teamID','g','score').ffill(axis=1).astype(int)
df.columns=['first','second','last']
df=df.reset_index()
打印(df)
teamID第一秒最后一秒
0 ABC0110
1 abc02 10 8 1
teamID  first   second  last
abc01   10         10       10
abc02   10         8        1
abc03
...     
...
zzz0z
df = df.sort_values(['teamID','score'], ascending=[True, False])

df['g'] = df.groupby('teamID').cumcount()

df = df[df['g'] < 3]
df = df.pivot('teamID','g','score').ffill(axis=1).astype(int)
df.columns = ['first','second','last']
df = df.reset_index()
print (df)
  teamID  first  second  last
0  abc01     10      10    10
1  abc02     10       8     1