Вы можете использовать sort
+ cumcount
для обозначения результатов на основе оценки, тогда это будет pivot
.
data = [[1,'tom', 10], [1,'nick', 15], [2,'juli', 14],
[2,'peter', 20], [3,'juli', 3], [3,'peter', 13]]
have = pd.DataFrame(data, columns = ['Round', 'Name', 'Score'])
have = have.sort_values('Score')
have['outcome'] = have.groupby('Round').cumcount().map({0: 'Loser', 1: 'Winner'})
res = have.pivot(index='Round', columns='outcome', values=['Score', 'Name'])
Name Score
outcome Loser Winner Loser Winner
Round
1 tom nick 10 15
2 juli peter 14 20
3 juli peter 3 13
Если вы нене нужен мультииндекс:
res.columns = [''.join(x[::-1]) for x in res.columns]
res = res.reset_index()
Round LoserScore WinnerScore LoserName WinnerName
0 1 10 15 tom nick
1 2 14 20 juli peter
2 3 3 13 juli peter