Pandas 筛选多个(>;100)列上具有条件的熊猫中的行
我有一个20K列的数据框,我需要通过应用超过400列的条件来过滤特定行: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
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]