2014-11-06 85 views
1

通過如何通過索引列表快速查找?

df.loc[ candidates ] 

但是鑑於候選人指數

candidates = np.array([ 3, 4, 5 ]) 

您可以查找列表中的數據幀df如果有候選人在df.index這個缺失會拋出異常。 什麼是該最快方式同時獲得?:

  • df對於那些在索引
  • 的布爾值數組,指示哪個候選是在索引
所有候選的切片

特別是如果df.index.is_monotonic == True,這個事實應該用來加快速度。

+1

你問的東西,像'df.index.isin(候選人)'和'候選人(df.index.isin(候選人))'? – EdChum 2014-11-06 11:55:27

+0

不完全。計算'df.index.isin(候選人)'是不必要的,如果我只需要知道哪些候選人是'df'的有效索引。想象一下'df.index'是巨大的,而'candidates'很小。迭代'候選'不足以超過'df.index'就足夠了。 – smatting 2014-11-10 09:24:45

回答

0

作爲基準,df.size約爲6.8M。

%time df.index.isin([45,66,77,99,87,65,234,668,798]) 
Wall time: 15 ms 
array([False, False, False, ..., False, False, False], dtype=bool) 

我的建議

%%time 
item_list = [45,66,77,99,87,65,234,668,798] 
result_list = [] 
for item in item_list: 
    if item in user_shop_df.index.values: 
     result_list.append(True) 
    else: 
     result_list.append(False) 
Wall time: 10 ms