У меня есть df, и я хочу применить множественную фильтрацию этого df.
...
def applyFilter(self):
## 1st Condition
if self.col1_lineEdit.text() != "":
self.filter_col1 = (self.myDataFrame['col1'] == self.col1_lineEdit.text())
else:
self.filter_col1 = [True] * len(self.myDataFrame) # If line edit is empty, take all values.
if self.col2_lineEdit.text() != "":
self.filter_col2 = (self.myDataFrame['col2'] == self.col2_lineEdit.text())
else:
self.filter_col2 = [True] * len(self.myDataFrame)
if self.col3_lineEdit.text() != "":
self.filter_col3 = (self.myDataFrame['col3'] == self.col3_lineEdit.text())
else:
self.filter_col3 = [True] * len(self.myDataFrame)
## 2nd conditions
if self.col4_lineEdit.text() != "":
self.filter_col4 = (self.myDataFrame['col4'] == self.col4_lineEdit.text())
else:
self.filter_col4 = [True] * len(self.myDataFrame)
if self.col5_lineEdit.text() != "":
self.filter_col5 = (self.myDataFrame['col5'] == self.col5_lineEdit.text())
else:
self.filter_col5 = [True] * len(self.myDataFrame)
if self.col6_lineEdit.text() != "":
self.filter_col6 = (self.myDataFrame['col6'] == self.col6_lineEdit.text())
else:
self.filter_col6 = [True] * len(self.myDataFrame)
...
это мой метод применить фильтр. После этого я использовал что-то вроде этого:
self.filteredResult = self.myDataFrame[self.filter_col1 & self.filter_col2 & self.filter_col3 & self.filter_col4 & self.filter_col5 & self.filter_col6]
это работает только для фильтрации col1 и col2 . Однако, если я изменю формулу следующим образом (отключите первый операнд с и );
self.filteredResult = self.myDataFrame[self.filter_col1 and self.filter_col2 & self.filter_col3 & self.filter_col4 & self.filter_col5 & self.filter_col6]
, он будет работать для col2 и col3. Итак, я попытался отладить код, а затем получил такую ошибку;
self.filteredResult = self.myDataFrame [self.filter_col1 & self.filter_col2 & self.filter_col3 & self.filter_col4 & self .filter_col5 & self.filter_col6] TypeError: неподдерживаемые типы операндов для &: 'list' и 'list'
Когда я ищу проблему на inte rnet, в каждом решении использовалось не более двух фильтров. Если я применяю два фильтра, проблем нет. Однако мне нужно применить 6 фильтров. Я также искал и пробовал какое-то решение с кодом ошибки. Тоже ничего не получил. Вы можете мне помочь или рассказать что-нибудь о проблеме?
Изменить: я не понял ошибку. Если & операнд не может использоваться в списке. Почему первое и второе не могут применяться к другим?
Важное изменение: я забыл сказать это; если я применяю фильтр в первом или втором столбце, я могу применить другие фильтры. (в данном случае)
self.filteredResult = self.myDataFrame[self.filter_col1 & self.filter_col2 & self.filter_col3 & self.filter_col4 & self.filter_col5 & self.filter_col6]
Насколько я понимаю, программа сравнивает первые два фильтра с операндом &, тогда остальные фильтры зависят от этих фильтров.