从数据框中获取特定的单元格

问题描述 投票:2回答:1

我正在使用播放器,值(=捐赠的树),等级和位置作为列来编程动态数据框。玩家玩游戏并能够自行设置值。值越高,等级和位置越高。在游戏的最后,我只想向他们展示他们的位置,例如您的位置占总数的x。

但是,如果我在Python中执行它,则会收到错误消息:

end_Position行中的“ [索引错误:单个位置索引器超出范围]

df = pd.DataFrame({'Name': names, 'Donated Trees': trees})
df['Rank'] = df['Donated Trees'].rank(method='dense', ascending=False).astype(int)
df['Position'] = df['Rank'].rank(method='min').astype(int)
df.set_index('Rank', inplace=True)
df.sort_values(by="Donated Trees", ascending=False)
end_position = str(df.loc[df['Name'] == self.player.name, 'Position'].iloc[0])

“”

python pandas position rank index-error
1个回答
0
投票

因此,您共享的错误消息是“名称”列中没有出现self.player.name时将收到的错误消息。

但是,我认为您在这里犯了一个设计错误。您将“等级”设置为索引。理想情况下,您将索引用作唯一字段,从而可以快速检索感兴趣的行。由于“等级”不是唯一的,并且您也没有使用快速检索功能,因此我不建议这样做。相反,您应该将“名称”作为索引。您已经两次使用它进行检索,并且它很可能是唯一的。 (最好是确保以某种方式,但是在您的代码中您已经假设“名称”是唯一的。)这样,您可以提高代码的效率,可读性,并且使用“鲍勃”可以得到更易理解的KeyError: "Bob"。密钥不在您的数据框中。

df = pd.DataFrame({'Name': names, 'Donated Trees': trees})
df['Rank'] = df['Donated Trees'].rank(method='dense', ascending=False).astype(int)
df['Position'] = df['Rank'].rank(method='min').astype(int)
df.set_index('Name', inplace=True)
df.sort_values(by="Donated Trees", ascending=False)
print(" ".join(["Your current position is", str(df.loc["Sam", 'Position']), "of", str(len(df))]))
end_position = str(df.loc[self.player.name, 'Position'])
© www.soinside.com 2019 - 2024. All rights reserved.