Python 如何基于在另一个数据库中的查找来选择dataframe中的列?

Python 如何基于在另一个数据库中的查找来选择dataframe中的列?,python,pandas,dataframe,Python,Pandas,Dataframe,我正在使用一个具有大量预测值的数据集,并希望通过使用控制文件轻松测试不同的复合变量分组。对于初学者,控制文件将指示是否包含变量。下面是一个例子: control = pd.DataFrame({'Variable': ['Var1','Var2','Var3'], 'Include': [1,0,1]}) control Out[48]: Include Variable 0 1 Var1 1 0 V

我正在使用一个具有大量预测值的数据集,并希望通过使用控制文件轻松测试不同的复合变量分组。对于初学者,控制文件将指示是否包含变量。下面是一个例子:

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
因此,处理后的结果应该是一个新的dataframe,看起来像data,但会删除Var2列:

data2
Out[51]: 
  Sample  Var1  Var3
0      a     1     0
1      b     0     0
2      c     0     1
我可以通过使用.itetrows()有选择地删除列来实现这一点:

这是可行的,但似乎有一种方法可以同时在整个数据帧上实现这一点。比如:

data2 = data[control['Include'] == 1]
但是,这会根据“Include”值而不是列筛选出行


感谢您的建议。

控件
框架中选择必要的标题,并使用
数据
中的智能选择:

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

一个旁注:考虑使用布尔< <代码>真和<代码> false 而不是在<代码>中的“0”和“1s”,如果可能的话,包括列。

< P>这是一个非常快的解决方案,使用NUMPY和重构< /P>
# 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])

使用原始numpy例程的solns更加冗长,只会让初学者感到困惑;坚持使用更为用户友好的索引例程(特别是因为标记不需要numpy soln)谢谢@DYZ-首先将标题转换为列表就可以了。在这种情况下,测试布尔值的正确方法是什么?仍然==1?它是这样的:
headers=control[control['Include']['Variable']
# 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])