Pandas 筛选多个(>;100)列上具有条件的熊猫中的行

Pandas 筛选多个(>;100)列上具有条件的熊猫中的行,pandas,Pandas,我有一个20K列的数据框,我需要通过应用超过400列的条件来过滤特定行: COL1 COL2 ... COL400 total 0 1.0 5.0 3.0 1.21 1 1.0 NaN NaN 4.33 2 NaN NaN NaN 1.00 3 NaN 2.0 1.0 0.12 4 NaN NaN NaN 0.00

我有一个20K列的数据框,我需要通过应用超过400列的条件来过滤特定行:

        COL1  COL2 ... COL400 total
  0      1.0  5.0      3.0    1.21
  1      1.0  NaN      NaN    4.33
  2      NaN  NaN      NaN    1.00
  3      NaN  2.0      1.0    0.12
  4      NaN  NaN      NaN    0.00
  5      1.0  3.0      4.0    3.39
  ...
        COL1  COL2 ... COL400 total
  0      1.0  5.0      3.0    1.21
  1      1.0  NaN      NaN    4.33
  3      NaN  2.0      1.0    0.12
  5      1.0  3.0      4.0    3.39
  ...
我所需要的是在这400列中的至少一列中,将包含至少1个数值的行保持在[1,5]之间:

        COL1  COL2 ... COL400 total
  0      1.0  5.0      3.0    1.21
  1      1.0  NaN      NaN    4.33
  2      NaN  NaN      NaN    1.00
  3      NaN  2.0      1.0    0.12
  4      NaN  NaN      NaN    0.00
  5      1.0  3.0      4.0    3.39
  ...
        COL1  COL2 ... COL400 total
  0      1.0  5.0      3.0    1.21
  1      1.0  NaN      NaN    4.33
  3      NaN  2.0      1.0    0.12
  5      1.0  3.0      4.0    3.39
  ...
请注意,还有一个额外的列合计,不应包含在此筛选中(顾名思义,应用筛选后,我们将所有剩余行的合计相加)

到目前为止,我在较少专栏中使用的天真方法是这样的:

df[df.eval('COL1 >= 1 & COL1 <= 5 | COL2 >= 1 & COL2 <= 5')]
但这同样没有帮助


理想情况下,如果可能的话,我希望使用一种简单的方法在字符串中定义布尔表达式,因为这样可以允许最终用户定义用于此筛选的自定义表达式。

比较所有列,并通过以下方式检查每行是否至少有一个
True

#检查所有列中的值

df=df[(df>=1)和(df=1)和(df[cols]谢谢!这看起来很有希望。我有两个后续问题:1.如果我还有一个以后需要但不应该包含在筛选中的额外列,有什么方法可以这样做吗?2.有没有等效的方法使用字符串作为输入,以便最终用户可以使用它?@DaneelOlivaw-只有一个列需要排除?@DaneelOlivaw-是否可以通过编辑此新要求来更改有问题的数据?使用
df=df[(df.drop('total',axis=1)>=1)和(df.drop('total',axis=1)@DaneelOlivaw-或者如果需要所有不带last的列
df=df[(df.iloc[:,:-1]>=1)和(df.iloc[,:,:-1]