Предположим, что у вас есть эта преамбула
import pandas as pd
df = pd.DataFrame({'a': [5,5,4,5,4], 'b': ['foo','bar','foo','test','bar'],'c': [2,3,2,1,7]})
и эта функция
def helper_function(df,d):
x = True
for (i,k) in enumerate(d):
y = getattr(df[k['key']],k['function'])(k['values'])
if k['isnot']:
y = getattr(getattr(y,'__ne__'),'__self__')
if i == 0:
x = y
else:
x = getattr(x,k['left_connector'])(y)
return x
Теперь вы можете создать список словарей
di = [
{
'key': 'a',
'function': 'isin',
'isnot': False,
'values': [5],
'left_connector': "__and__"
},
{
'key': 'b',
'function': 'isin',
'isnot': True,
'values': ['test','bar'],
'left_connector': "__and__"
},
{
'key': 'c',
'function': 'isin',
'isnot': False,
'values': [0,1,2,3],
'left_connector': "__or__"
},
]
и использовать этукод для фильтрации
df[helper_function(df,di)]
Поскольку вы используете только функции панд, вы сохраняете производительность панд.