Python 在具有重复值的数据帧中定位

Python 在具有重复值的数据帧中定位,python,pandas,dataframe,position,rank,Python,Pandas,Dataframe,Position,Rank,我正在尝试实现一个游戏。 为此,玩家将根据他们输入的值进行排名。 游戏是动态的,他们输入的值在每一轮之后都被加起来。然后游戏再比较谁是最棒的 第一个,谁是第二个,等等。 我还想告诉他们目前的情况。但是,如果两名玩家输入相同的值,这并不容易:(下面列表中的每个位置都是一名玩家) 最后,我想将当前位置返回给玩家,例如玩家1:当前位置为1/4 玩家3:当前位置是4/4 (请注意,职级和职位可能会因轮而异。这就是为什么像current_position这样的变量会更好的原因) 我已经为玩家和值创建了数据

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

第一个,谁是第二个,等等。 我还想告诉他们目前的情况。但是,如果两名玩家输入相同的值,这并不容易:(下面列表中的每个位置都是一名玩家)

最后,我想将当前位置返回给玩家,例如玩家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)

你说的“他们不应该看到其他球员的位置”是什么意思?无论python中的变量是什么,他们都会看到您将向他们展示的内容。只需使用
df[df['Name']==player\u Name]
显示每个玩家自己的数据即可。此游戏中有不同的组。A组看到带有名称、值、等级的数据帧,B组应该只看到这样的内容:“你的当前位置是3/4”,所以如果轮到他们,他们会看到
df[df['Name']==player\u Name]
,如果没有,他们会看到
print(“”)。join([“你的当前位置是”),str(df.loc[df['Name']==player\u Name,'Rank']),“of”,str(len)(df))])
为了确保这一点,您说我应该创建一个新的数据框,它只按df[df['Name']==player\u Name]显示相应播放器的行。然后另一个代码显示评估单元格排名中的值,对吗?你知道如何获取位置吗?因为如果玩家输入相同的值,排名和位置之间会有细微的差异,因此没有理由创建另一个数据框。在该数据框中添加一列
position
。如果你不想使用
rank
但仅
位置
,则不具有
等级
列。
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)