2013-05-22 8 views
12

カラムに既知の値がある場合、そのインデックス値はどのように取得できますか?たとえば、PANDASでは、既知の値のインデックスを取得する方法は?

In [148]: a = pd.DataFrame(np.arange(10).reshape(5,2),columns=['c1','c2']) 
In [149]: a 
Out[149]: 
    c1 c2 
0 0 1 
1 2 3 
2 4 5 
........ 

私たちが知っているように、私たちは知っているように、それに対応するインデックスで値を得ることができます。

In [151]: a.ix[0,1] In [152]: a.c2[0] In [154]: a.c2.ix[0] <-- use index 
Out[151]: 1   Out[152]: 1   Out[154]: 1   <-- get value 

インデックスで値を取得するにはどうすればよいですか?

答えて

24

それはリストを返すために、より多くの意味を行い、あなたの値に複数のインデックスマップがあるかもしれません:

In [48]: a 
Out[48]: 
    c1 c2 
0 0 1 
1 2 3 
2 4 5 
3 6 7 
4 8 9 

In [49]: a.c1[a.c1 == 8].index.tolist() 
Out[49]: [4] 
+0

非一意のエントリを持つことができ、インデックス、なぜあなたはそれがリストを返すために、より理にかなって言うのですか? –

+0

うーん、私はそれが間違っていると思う。すべてのインデックスが一意であれば、 'a.c1 [a.c1 == 8] .index.tolist()[0]' – waitingkuo

+0

という回答をいただきありがとうございます。私はインデックスのオブジェクトは、プレーンリストに変換することができると考えていない.thanks agagin。 – user2407991

4

numpy.whereを()を使用して、他の方法で回避:

import numpy as np 
import pandas as pd 

In [800]: df = pd.DataFrame(np.arange(10).reshape(5,2),columns=['c1','c2']) 

In [801]: df 
Out[801]: 
    c1 c2 
0 0 1 
1 2 3 
2 4 5 
3 6 7 
4 8 9 

In [802]: np.where(df["c1"]==6) 
Out[802]: (array([3]),) 

In [803]: indices = list(np.where(df["c1"]==6)[0]) 

In [804]: df.iloc[indices] 
Out[804]: 
    c1 c2 
3 6 7 

In [805]: df.iloc[indices].index 
Out[805]: Int64Index([3], dtype='int64') 

In [806]: df.iloc[indices].index.tolist() 
Out[806]: [3] 
3

.loc []アクセサの使用:

In [25]: a.loc[a['c1'] == 8].index[0] 
Out[25]: 4 

インデックスとして 'c1'を設定してget_loc()を使用することもできます。これにより、元のデータフレームは変更されません。

In [17]: a.set_index('c1').index.get_loc(8) 
Out[17]: 4 
0

単にクエリの最後に.INDEX [0]を追加し、値によってインデックスを取得します。これは、だから... ...

の結果の最初の行のインデックスを返すあなたのデータフレームに適用されます:

In [1]: a[a['c2'] == 1].index[0]  In [2]: a[a['c1'] > 7].index[0] 
Out[1]: 0       Out[2]: 4       

クエリが1行よりよりを戻す場合は、追加のインデックスの結果がすることができ所望のインデックスを指定することによってアクセスされる。 .INDEX [n]は

In [3]: a[a['c2'] >= 7].index[1]  In [4]: a[(a['c2'] > 1) & (a['c1'] < 8)].index[2] 
Out[3]: 4       Out[4]: 3 
関連する問題