从数据框

时间:2017-07-27 14:00:55

标签: python python-3.x pandas

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

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

2 个答案:

答案 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'