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