python - 如何让 df.loc 仅从数据帧的特定单元格返回值(数字)?

标签 python pandas dataframe indexing pandas-loc

我正在处理有关大学篮球队拿 2 分和 3 分的频率的数据。我计划将它们取 3 的频率乘以 3,并将其添加到它们取 2 的频率乘以 2。一个函数将执行此操作。该函数稍后将被放入一个更大的函数中,但这不应该引起任何约束(我不认为)。

以下是 pandas 数据集的前 10 行:

Team    3PtTakeRate 2PtTakeRate
Savannah St 0.577   0.423
Quinnipiac  0.538   0.462
Citadel     0.536   0.464
Villanova   0.535   0.465
Winthrop    0.527   0.473
Longwood    0.501   0.499
Elon        0.500   0.500
Auburn      0.496   0.504
Campbell    0.490   0.510
N Dakota St 0.482   0.518
N Hampshire 0.481   0.519

如果重要的话,我使用以下命令从 csv 文件加载数据:

TeamShotChoices = pd.read_csv("NCAAExpValue.csv",sep=',')

这是我的函数的样子:

def PtsPerSuccess(Team):
    TeamPts = ((TeamShotChoices.loc[TeamShotChoices['Team']==Team,'3PtTakeRate']) * 3) + ((TeamShotChoices.loc[TeamShotChoices['Team']==Team,'2PtTakeRate']) * 2)
    return TeamPts

团队参数将是引号中的团队名称。根据记录,在较大的函数中,这个参数将从字符串列表中获取,并且需要为团队和接下来的时间找到这个值......但我应该能够使用 [i]和 [i + 1] 和索引。所以,再次,应该没问题......

当我运行这个函数时,例如:

PtsPerSuccess('Savannah St')

我得到的是这样的:

0    2.577
dtype: float64

我将使用 2.577 作为乘以的数字,然后在 if 语句中使用所得结果来确定模拟游戏的获胜者。所以这种返回方式是行不通的。

令我困惑的是为什么它给了我所有这些信息。我不想要 0 (即行号),也不想要 dtype。在本例中,我只希望该函数返回 2.577。

最佳答案

原因很简单,您基本上是在 pandas 对象上执行转换,该对象通常包含多个值。 pandas知道 Team 的每个值都是唯一的(怎么可能?),因此它假设选择和乘法运算的结果另一个结果也包含多个值。

为了尽量减少对代码的干扰,您只需将 return 语句更改为 return TeamPts[0] 即可。

关于python - 如何让 df.loc 仅从数据帧的特定单元格返回值(数字)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55661198/

相关文章:

python - 我可以把它写成包装器吗?

python - 使用 Swig、python 包装 Patricia Tries 的问题

Python - 从 mpl_connect 处理程序调用时 ProcessPoolExecutor 挂起

Pandas:比较两列并返回匹配的行

python - 按值比较数据帧

python-3.x - Python 中的重采样

python - flask /SQLAlchemy 错误 : TypeError: Incompatible collection type: [model] is not list-like

python - 从 Pandas Dataframe 写入格式化的二进制文件

python - 在范围内合并 Pandas 数据框的最快方法

r - 根据 R 中现有列中的组创建新列