Положение в Dataframe с повторяющимися значениями - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь реализовать игру.Для этого игроки ранжируются на основе значений, которые они вводят.Игра динамична, и вводимые ими значения добавляются после каждого раунда.Затем игра снова сравнивает, кто первый

, кто второй и т.д. Я также хочу дать им их текущую позицию.Однако это нелегко, если 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)

DataFrame

...