【发布时间】:2021-11-16 14:31:09
【问题描述】:
假设用户可以输入列和值来比较 DF,所以我们可以:
column_list = ['col1', 'col2', 'col3']
value_list = [val1, val2, val3]
所以要选择满足 where col1 >= val1 AND col2 >= val2 AND col3 >= val3 的行,我们会这样写:
selection = (df['col1'] >= val1) & (df['col2'] >= val2) & (df['col3'] >= val3))
也可以是以下形式:
selection = df.loc[(df['col1'] >= val1) & (df['col2'] >= val2) & (df['col3'] >= val3)]
列数是事先不知道的,所以我们可以有n列。我们可以试试这个方法:
if n=1:
selection = (df['col1'] >= val1))
elif n=2:
selection = (df['col1'] >= val1) & (df['col2'] >= val2))
elif n=3:
selection = (df['col1'] >= val1) & (df['col2'] >= val2) & (df['col3'] >= val3))
但这既不可扩展也不高效。我尝试通过在给定输入列表的情况下使用 foror 循环生成字符串“df['col'] >= val)”,但由于 str 格式,它不适用于 Pandas。
对此最好的pythonic方法是什么?避免使用 if 和 else 语句的所有选项。
提前谢谢你!
【问题讨论】:
-
有不同的
>,<, =>, <=? -
OP,你能确认一下你的意思是混合不同的比较运算符吗?
-
我会更新它,对于所有这些都应该是 ">="
标签: python pandas dynamic multiple-columns multipleselection