python - 提取三个最大值并将其放入单独的列中

标签 python pandas dataframe

我有一个棒球运动员及其效力球队的数据库。数据框可以简化如下:

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/

相关文章:

pandas:获取数组中的所有 groupby 值

r - 如何计算常见概念并将结果存储在矩阵中?

python - 异步队列收集协程的返回值

python - nidaqmx:防止任务在功能更改后关闭

python-3.x - 如何在 pandas DataFrame 中跨列重新排序值?

python - 将 Pandas DataFrame 转换为多维 ndarray

Python读取索引不在列表中的HDF5行

python - 将数据框中的每个单元格除以 Pandas 中该列的最大值

javascript - 使用 PySide QtCore.Slot 装饰器的多个参数

python - 动态过滤 Pandas 数据框