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

时间:2019-04-13 01:20:01

标签: python pandas dataframe indexing loc

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

这是熊猫数据集的前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。

1 个答案:

答案 0 :(得分:0)

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

要至少破坏代码,只需将return语句更改为return TeamPts[0]