2

我正在处理有关大学篮球队获得 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

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

当我运行此功能时,例如:

PtsPerSuccess('Savannah St')

我得到的是:

0    2.577
dtype: float64

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

我感到困惑的是为什么它会给我所有这些信息。我不想要 0(这是行号),也不想要 dtype。在这种情况下,我只希望函数返回 2.577。

4

1 回答 1

0

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

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

于 2019-04-13T01:25:06.970 回答