Как получить скалярное значение в ячейке с помощью условной индексации
У меня есть 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'