Python 遍历列表以生成OR语句

Python 遍历列表以生成OR语句,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个函数,它接受一个数据帧,并对由OR连接的特定列执行一系列筛选器。我只需要一列低于96就可以通过过滤器 这段代码工作得很好,但我想改进这个函数,以便能够向函数传递一个列表,该列表将作为过滤器,而不是将列硬编码到函数中 def去除从未使用过的药物,df: 过滤掉95以上的值 从未使用或未应答的代码 df=df[ df['CAN_060']

我有一个函数,它接受一个数据帧,并对由OR连接的特定列执行一系列筛选器。我只需要一列低于96就可以通过过滤器

这段代码工作得很好,但我想改进这个函数,以便能够向函数传递一个列表,该列表将作为过滤器,而不是将列硬编码到函数中

def去除从未使用过的药物,df: 过滤掉95以上的值 从未使用或未应答的代码 df=df[ df['CAN_060']<96| df['ALC_30']<96| df['PS_30']<96| df['COC_20']<96| df['HAL_20']<96| df['MET_20']<96| df['XTC_20']<96| df['GLU_20']<96| df['HER_20']<96| df['SAL_20']<96 ] 这将生成and`and`语句我想要and`OR`语句 关于药物中的药物: df=df[df[药物]<96] displaydf 返回df 我能想到的构建此语句的唯一方法是迭代列表并逐步构建它。但是,这会生成AND语句。

如果在筛选列中,每行至少有一个值为True,则用于测试:

df = pd.DataFrame({
        'A':list('abcdef'),
         'CAN_060':[400,512,4,5,5,400],
         'PS_30':[742,8,9,4,200,300],
         'COC_20':[100,3,5,7,100,100],
         'E':[5,3,6,9,2,4],
         'F':list('aaabbb')
})

print (df)
   A  CAN_060  PS_30  COC_20  E  F
0  a      400    742     100  5  a
1  b      512      8       3  3  a
2  c        4      9       5  6  a
3  d        5      4       7  9  b
4  e        5    200     100  2  b
5  f      400    300     100  4  b

cols = ['CAN_060','PS_30','COC_20']

print ((df[cols] < 96))
   CAN_060  PS_30  COC_20
0    False  False   False
1    False   True    True
2     True   True    True
3     True   True    True
4     True  False   False
5    False  False   False

我认为在您的情况下,您应该尝试pandas.eval函数,以便连接您想要执行的操作:

operations = ''

for drug in drugs:
        operations = operations + ' | ' + '(df.' + drug + '< 96)'

df = pd.eval(operations)
operations = ''

for drug in drugs:
        operations = operations + ' | ' + '(df.' + drug + '< 96)'

df = pd.eval(operations)