2016-11-15 18 views
1

ユニークpd.Indexidxとインデックスのリストを考えてみましょリスト内のすべての項目のインデックス内の順序位置を得るのですかlstはどのように効率的に

idx = pd.Index(list('abcdefg')) 
lst = list('bdf') 

我々はidx.get_loc('b')によって'b'の序数位置を取得することができます。

lstにあるすべての商品の注文状況を効率的に取得するにはどうすればよいですか?

idx.get_loc(lst)は動作しません:

TypeError: '['b', 'd', 'f']' is an invalid key 
+0

あなたは一意の値としてインデックスを作成してもよろしいですか?また、あなたのインデックスの典型的なサイズは?あなたの例の '' idx.get_loc(item in lst item) 'はそれを行う簡単な方法ですから – Boud

+0

はい!私は更新します – piRSquared

答えて

0

lst numpyの配列を作成し、放送と比較します。次に、argmaxを使用して位置を特定します。 idxがソートされていない場合

idx.searchsorted(lst) 

、我々はそれをsorter引数を使用する必要があります -

(idx.values[:, None] == np.array(lst)).argmax(0) 

array([1, 3, 5]) 
2
In [317]: timeit (np.array(idx)[:,None]==np.array(lst)).argmax(0) 
10000 loops, best of 3: 35.4 µs per loop 
In [318]: timeit [idx.index(i) for i in lst] 
100000 loops, best of 3: 4.78 µs per loop 
In [321]: timeit np.where(np.in1d(idx,lst)) 
10000 loops, best of 3: 53.1 µs per loop 
関連する問題