这是一个非常简单的问题,但我总是发现自己做了太多的操作,无法从数据帧中获取单个位置值。 让我解释一下:
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]
只返回实际值而不是系列
您可以使用 Series.item:
print(df.loc[df.a == 'a', 'b'].item())
r
您可以使用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'