Как заставить df.loc просто возвращать значение (число) из определенной ячейки кадра данных? - PullRequest
1 голос
/ 13 апреля 2019

Я работаю с данными о частоте, с которой баскетбольные команды колледжа берут 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

Аргументом команды будет название команды в кавычках. Для записи, в большей функции этот аргумент будет извлечен из списка строк, и ему нужно будет найти это значение для команды И в следующий раз .... но я должен иметь возможность использовать [i] и [i + 1] и индексы. Значит, опять должно быть в порядке ....

Когда я запускаю эту функцию, например:

PtsPerSuccess('Savannah St')

что я получаю, это:

0    2.577
dtype: float64

Я собираюсь использовать 2.577 как число, на которое я умножусь, и затем использовать этот полученный продукт в операторе if для определения победителей имитируемых игр. Таким образом, способ, которым это возвращается, не будет работать.

Что меня смущает, так это то, почему он дает мне всю эту информацию. Я не хочу 0 (который является номером строки), и я не хочу dtype. Я просто хочу, чтобы в этом случае функция возвращала 2.577.

1 Ответ

0 голосов
/ 13 апреля 2019

Простая причина в том, что вы в основном выполняете преобразования для объекта pandas, который обычно содержит несколько значений.pandas не не знает , что каждое значение Team уникально (как это может быть?), Поэтому предполагается, что операции выбора и умножения приводят к другому результату, также содержащему несколько значений.

Чтобы как минимум нарушить ваш код, вы можете просто изменить return оператор на return TeamPts[0].

...