2016-10-14 6 views
2

私が必要な情報を取得する方法を知りましたが、それを行うためのより良い、より読みやすい方法がない場合は驚きます。パンダ:一意の値に基づいて行の対応する列の値を取得します

私が指定したデータ要素を保持する行の別の列に値を取得したいとします。たとえば、 'a'の値10に対応する 'b'の値は何ですか?

>>> df 
    a b c 
0 10 20 30 
1 11 21 31 
2 12 22 32 

>>> df['b'][df[df['a'] == 11].index.tolist()].tolist() 
[21] 

これは、私は現在、それを解決する方法であるが、実際には、私のデータフレームは、とても簡潔に命名され、ラインが読みにくくなるので、私は列名として長い文字列を持っていません。

編集: 'a'の値が一意でない場合は、 'b'に対応するすべての値を取得する方法もありますか?

+2

あなたは 'df.loc [df [' a '] == 11、' b ']'を意味しますか? – EdChum

+0

私は、ありがとう! @EdChum 'a'の値が一意でない場合、これは 'b'の対応するすべての値も返しますか? – aberger

+0

はい............ – EdChum

答えて

5

ブール条件が満たされているすべての行を返すためにブール値マスクlocを使用することができます。ここで、 'a' == 11の条件でdfをマスクし、これが満たされたところで 'b ':

In [120]: 
df = pd.DataFrame({'a':[10,11,11],'b':np.arange(3), 'c':np.random.randn(3)}) 
df 

Out[120]: 
    a b   c 
0 10 0 -1.572926 
1 11 1 -0.639703 
2 11 2 -1.282575 

In [121]: 
df.loc[df['a'] == 11,'b'] 

Out[121]: 
1 1 
2 2 
Name: b, dtype: int32 
関連する問題