我有一个棒球运动员及其效力球队的数据库。数据框可以简化如下:
df = pd.DataFrame({'teamID':['abc01','abc02','abc02'], 'playerID': ['p1','p2','p1'], 'score': [10,10,10] } )
teamID playerID score
abc01 p1 10
abc02 p2 10
abc02 p1 8
abc02 p3 1
abc03
...
zzz0z
现在我想添加三列,分别显示所有玩家的第一、第二和第三大得分,但按他们所参加的球队分组。特别是,我希望决赛 table 看起来像这样:
teamID first second last
abc01 10 10 10
abc02 10 8 1
abc03
...
...
zzz0z
尝试了好几种方法,看来问题有点复杂。谁能给我提示吗?
最佳答案
首先按 DataFrame.sort_values
对多列的值进行排序,通过 GroupBy.cumcount
创建计数器列,按boolean indexing
过滤top3并通过 DataFrame.pivot
reshape :
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
关于python - 提取三个最大值并将其放入单独的列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57374631/