首页 > 解决方案 > 具有重复值的数据框中的位置

问题描述

我正在尝试实现一个游戏。为此,玩家将根据他们输入的值进行排名。游戏是动态的,他们输入的值在每一轮之后都会累加。然后比赛再次比较谁是

第一个,谁是第二个等等。我也想给他们现在的位置。但是,如果 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 这样的变量会很好的原因)

我已经为玩家和值创建了数据框,并且能够使用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)

数据框

标签: pythonpandasdataframepositionrank

解决方案


推荐阅读