Как получить скалярное значение в ячейке с помощью условной индексации

У меня есть dataframe, показанный ниже. Мне нужно получить скалярное значение столбца B, зависящее от значения A (которое является переменной в моем script). Я пытаюсь использовать функцию loc(), но она возвращает серию вместо скалярного значения. Как получить скалярное значение()?

>>> x = pd.DataFrame({'A' : [0,1,2], 'B' : [4,5,6]})
>>> x
   A  B
0  0  4
1  1  5
2  2  6

>>> x.loc[x['A'] == 2]['B']
2    6
Name: B, dtype: int64

>>> type(x.loc[x['A'] == 2]['B'])
<class 'pandas.core.series.Series'>

Ответ 1

Прежде всего, вам лучше получить доступ к индексам строк и столбцов из .loc:

x.loc[x['A'] == 2, 'B']

Во-вторых, вы всегда можете получить базовую матрицу numpy с помощью .values в серии или dataframe:

In : x.loc[x['A'] == 2, 'B'].values[0]
Out: 6

ОБНОВЛЕНИЕ Если вас не интересует исходный вопрос "условная индексация", существует также определенная функция, предназначенная для получения единственного скалярного значения из DataFrame: dataframe.get_value(index, column)

Ответ 2

Вариант 1
.item()
Это работает, если ваши операции возвращают одну строку рядов.

x.loc[x['A'] == 2, 'B'].item()
6

Вариант 2
Используя iloc по результату loc -

x.loc[x['A'] == 2, 'B'].iloc[0]
6

Ответ 3

уточнение комментария @ShineZhang:

x.set_index('A').at[2, 'B']

6

pd.__version__

u'0.22.0'