2016-12-04 8 views
1

私は、多数の予測変数を持つデータセットを使用しており、制御ファイルを使用してさまざまな複合変数グループを簡単にテストしたいと考えています。まず、制御ファイルは変数を含めるかどうかを示します。ここでは例です:他のルックアップに基づいてデータフレーム内の列を選択する方法は?

control = pd.DataFrame({'Variable': ['Var1','Var2','Var3'], 
        'Include': [1,0,1]}) 

control 
Out[48]: 
    Include Variable 
0  1  Var1 
1  0  Var2 
2  1  Var3 

data = pd.DataFrame({'Sample':['a','b','c'], 
        'Var1': [1,0,0], 
        'Var2': [0,1,0], 
        'Var3': [0,0,1]}) 

data 
Out[50]: 
    Sample Var1 Var2 Var3 
0  a  1  0  0 
1  b  0  1  0 
2  c  0  0  1 

ので、処理後の結果は、データのように見えますが、VAR2列をドロップし、新しいデータフレームのようになります。

data2 
Out[51]: 
    Sample Var1 Var3 
0  a  1  0 
1  b  0  0 
2  c  0  1 

私はこれを選択使用して列をドロップすることで、仕事を得ることができます.itterows():

これは機能しますが、データフレーム全体でこれを一度に行う方法があるようです。次のようなものがあります。

data2 = data[control['Include'] == 1] 

ただし、これは列ではなく「インクルード」値に基づいて行をフィルタリングします。

感謝の意を表します。

答えて

2

controlフレームから必要なヘッダを選択し、dataからスマート選択を使用:

headers = control[control['Include']==1]['Variable'] 
all_headers = ['Sample'] + list(headers) 
data[all_headers] 
# Sample Var1 Var3 
#0  a  1  0 
#1  b  0  0 
#2  c  0  1 

側注:可能であれば、Include列に代えて0と1のブールTrueFalseの使用を検討してください。

+0

を使用してかなり速い解決する必要があります@DYZありがとう - リストにヘッダを変換する最初のトリックを行います。 この場合、ブール値をテストする正しい方法は何ですか?まだ== 1? – user1355179

+0

これは次のようなものです: 'headers = control ['Include']] ['Variable']' – DyZ

0

これはnumpyの復興

# get data columns values which is a numpy array 
dcol = data.columns.values 
# find the positions where control Include are non-zero 
non0 = np.nonzero(control.Include.values) 
# slice control.Variable to get names of Variables to include 
icld = control.Variable.values[non0] 
# search the column names of data for the included Variables 
# and the Sample column to get the positions to slice 
srch = dcol.searchsorted(np.append('Sample', icld)) 
# reconstruct the dataframe using the srch slice we've created 
pd.DataFrame(data.values[:, srch], data.index, dcol[srch]) 

enter image description here

+1

生のnumpyルーチンを使用するsolnsは、より冗長で初心者を混乱させるものです。ユーザーフレンドリーなパンダの索引付けルーチンに忠実に(タグは数えられないsolnを要求しないのでesp) – Jeff

関連する問題