仅从数据帧返回位置值的最简单方法



这是一个非常简单的问题,但我总是发现自己做了太多的操作,无法从数据帧中获取单个位置值。 让我解释一下:

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'

最新更新