2016-07-20 11 views
2

numpyによるインデックス作成は、ラベルに応じてからカラムを取得する方法がありますが、インデックス作成ははるかに高速です。pd.DataFrameからカラムラベルのインデックスを取得する効率的な方法

pandasまたはnumpyには、反復せずに列ラベルから列インデックスに移動する方法はありますか?

DF_var = pd.DataFrame(np.random.random((5,10)), columns=["attr_%d" % _ for _ in range(10)]) 
query_cols = ["attr_2","attr_5","attr_6","attr_0"] 
want_idx = [0,2,5,6] 

# Something like np.where w/o iterating through? 
# np.where(query_cols in DF_var.columns) 
# TypeError: unhashable type: 'list' 

# np.where(x in DF_var.columns for x in query_cols) 
# (array([0]),) 


long_way = list() 
for i, label in enumerate(DF_var.columns): 
    if label in query_cols: 
     long_way.append(i) 
# print(sorted(long_way)) 
# [0, 2, 5, 6] 

enter image description here

+2

参照:http://stackoverflow.com/questions/13021654/retrieving-column-index-from-column-name-in-python-pandasを – albert

+0

は、このためです単一の値またはリストのために? –

+0

@ O.rka singleですが、リストの理解度を使用してすべてのインデックスを取得できます。 – Alex

答えて

2
short_way = [df.columns.get_loc(col) for col in query_cols] 
print(sorted(short_way)) 
# outputs [0, 2, 5, 6] 
+1

ああ、それでもまだ繰り返す必要がありますか? –

+1

@ O.rkaはい。 AFAIKにはベクトル化された方法はありません。 – Alex

+0

フィードバックありがとう@Alex –

関連する問題