Итак, сообщение об ошибке, которое вы поделились, - это сообщение об ошибке, которое вы получите, когда 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'])