2017-07-27 42 views
4

這是一個非常簡單的問題,但我總是發現自己做了太多的操作以從數據框中獲取單個位置值。讓我來解釋一下:最簡單的方法是從數據框返回一個位置的值

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]只返回的實際值,而不是A系列

回答

2

您可以使用Series.item

print(df.loc[df.a == 'a', 'b'].item()) 
r 
+1

感謝。不知道。 –

1

您可以使用argmax拿到了賽作爲標量,然後用.loc -

df.loc[(df.a=='a').argmax(),'b'] 

當然,它假定我們在這比賽欄。

採樣運行 -

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' 
+0

謝謝@Divakar,這是一個咬人的黑客,但沒有問題 –

相關問題