从数据框中获取特定单元格
Posted
技术标签:
【中文标题】从数据框中获取特定单元格【英文标题】:Get specific cell from dataframe 【发布时间】:2020-01-28 23:39:40 【问题描述】:我正在编写一个动态数据框,其中包含玩家、值(=捐赠的树)、排名和位置作为列。 玩家玩游戏并能够自行设置数值。数值越高,等级和位置就越高。 在游戏结束时,我只想向他们展示他们的位置,比如你的位置是 x out of total。
但是,如果我在 Python 中执行它,我会收到一条错误消息:
end_Position 行中的“Index Error: single positional indexer is out-of-bounds”
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])
【问题讨论】:
你能分享一个可重现的例子吗?from scipy.stats import rankdata from itertools import count import collections as ct 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) df['Position'] = df['Rank'].rank(method='min').astype(int) df[df['Name'] == "Sam"] print(" ".join(["Your current position is", str(df.loc[df['Name'] == "Sam", 'Position'].iloc[0]), "of", str(len(df))]))
天哪,看起来很乱,对此我很抱歉,堆栈溢出是个新手。我为您创建了一个包含 4 名玩家的示例
请附上您的 DataFrame 样本。
该示例可通过以下链接获得:i.stack.imgur.com/ZgLOe.png
【参考方案1】:
因此,您共享的错误消息是当self.player.name
未出现在“名称”列中时您将收到的错误消息。
但是,我认为您在这里犯了设计错误。您将“排名”设置为索引。理想情况下,您将索引用作允许快速检索感兴趣的行的唯一字段。由于“排名”不是唯一的,而且您也没有使用快速检索功能,我不建议这样做。相反,您应该将“名称”设为索引。您已经使用它两次进行检索,并且它很可能是唯一的。 (最好以某种方式确保,但在您的代码中,您已经假定“名称”是唯一的。)这样您就提高了代码的效率和可读性,并且您将获得更易于理解的 KeyError: "Bob"
,使用“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'])
【讨论】:
以上是关于从数据框中获取特定单元格的主要内容,如果未能解决你的问题,请参考以下文章
提取特定单元格的值并将其填充以代替 pyspark 数据框中的 NA 值