Я пытаюсь реализовать игру.Для этого игроки ранжируются на основе значений, которые они вводят.Игра динамична, и вводимые ими значения добавляются после каждого раунда.Затем игра снова сравнивает, кто первый
, кто второй и т.д. Я также хочу дать им их текущую позицию.Однако это нелегко, если 2 игрока вводят одинаковые значения: (каждая позиция в списке ниже - игрок)
E.g.: entered values round 1 = [2, 4, 5, 4]
Rank [1, 2, 3, 2],
Position [1, 2, 4, 2]
В конце я хочу вернуть текущую позицию игрокам, дляпример игрока 1: текущая позиция 1/4 игрока 3: текущая позиция 4/4
(Обратите внимание, что ранги и позиции могут меняться от раунда к раунду. Именно поэтому такая переменная, как current_position, будет хорошей)
Я уже создал Dataframe для игроков и их значений и смог назначить ранг с помощью df['Rank'] = df['values'].rank(method='dense', ascending=False).astype(int).
Я мог получить позицию с помощью df[Position] = df['Rank'].rank(method='min').astype(int)
Однако это добавляет столбец к фрейму данных.Мне нужно назначить каждую текущую позицию соответствующему игроку.Они не должны видеть позиции других игроков.Пример ниже статичен.Я думаю, что если статическое решение работает, его довольно легко перевести в динамическое решение
from scipy.stats import rankdata
import pandas as pd
from tabulate import tabulate
names = ['Tim', 'Tom', 'Sam', 'Kyle']
values = [2, 4, 5, 4]
df = pd.DataFrame({'Name': names,'Values': values})
columns = ["Name", "Values"]
df['Rank'] = df['Values'].rank(method='dense', ascending=False).astype(int)