How to get scalar value on a cell using conditional indexing
Question:
I have the dataframe shown below. I need to get the scalar value of column B, dependent on the value of A (which is a variable in my script). I’m trying the loc() function but it returns a Series instead of a scalar value. How do I get the scalar value()?
>>> 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'>
Answers:
First of all, you’re better off accessing both the row and column indices from the .loc
:
x.loc[x['A'] == 2, 'B']
Second, you can always get at the underlying numpy matrix using .values
on a series or dataframe:
In : x.loc[x['A'] == 2, 'B'].values[0]
Out: 6
Finally, if you’re not interested in the original question’s “conditional indexing”, there are also specific accessors designed to get a single scalar value from a DataFrame: dataframe.at[index, column]
or dataframe.iat[i, j]
(these are similar to .loc[]
and .iloc[]
but designed for quick access to a single value).
elaborating on @ShineZhang comment:
x.set_index('A').at[2, 'B']
6
pd.__version__
u’0.22.0′
I have the dataframe shown below. I need to get the scalar value of column B, dependent on the value of A (which is a variable in my script). I’m trying the loc() function but it returns a Series instead of a scalar value. How do I get the scalar value()?
>>> 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'>
First of all, you’re better off accessing both the row and column indices from the .loc
:
x.loc[x['A'] == 2, 'B']
Second, you can always get at the underlying numpy matrix using .values
on a series or dataframe:
In : x.loc[x['A'] == 2, 'B'].values[0]
Out: 6
Finally, if you’re not interested in the original question’s “conditional indexing”, there are also specific accessors designed to get a single scalar value from a DataFrame: dataframe.at[index, column]
or dataframe.iat[i, j]
(these are similar to .loc[]
and .iloc[]
but designed for quick access to a single value).
elaborating on @ShineZhang comment:
x.set_index('A').at[2, 'B']
6
pd.__version__
u’0.22.0′