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