这是一个非常简单的问题,但我总是发现自己做了太多的操作来从数据帧中获取单个位置值。让我解释一下:
import pandas as pd
df = pd.DataFrame(list(zip('abcde', 'rithf')), columns=['a', 'b'])
df
Out[23]:
a b
0 a r
1 b i
2 c t
3 d h
4 e f
我正在尝试提取列{b}值column a == a
。使用非常直接的.loc会返回:
df.loc[df.a == 'a', 'b']
Out[24]:
0 r
Name: b, dtype: object
让价值变得很脏:
df.loc[df.a == 'a', 'b'].values[0]
Out[26]:
'r'
当您知道确切的索引时,它实际上只返回值:
df.loc[0, 'b']
Out[27]:
'r'
但显然我首先需要一个索引器。
所以问题是,是否有更性感的方式df.loc[df.a == 'a', 'b'].values[0]
仅返回实际价值而不是aseries
答案 0 :(得分:2)
您可以使用Series.item:
print(df.loc[df.a == 'a', 'b'].item())
r
答案 1 :(得分:1)
您可以使用argmax
将匹配作为标量,然后使用.loc
-
df.loc[(df.a=='a').argmax(),'b']
当然,它假定我们在'a'
列中匹配。
示例运行 -
In [346]: df
Out[346]:
a b
0 a r
1 b i
2 c t
3 d h
4 e f
In [347]: (df.a=='a').argmax() # row indexer
Out[347]: 0
In [348]: df.loc[(df.a=='a').argmax(),'b']
Out[348]: 'r'