Как получить строки с фильтрацией по нескольким столбцам и условиям?
Имеется DataFrame следующего формата:
AB | CD | FG | GL
12 23 23 67
34 45 45 87
76 87 98 67
Забираю строки из него функцией
def parse_table(value):
if value is None:
return df
pars = df[df.AB.str.contains('|'.join(value))]
return pars
Возможно ли забирать строки с условием фильтрации по одной или нескольким конкретно заданным колонкам?
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Пример:
In [30]: values = [34, 45, 45]
In [31]: d = dict(zip(df.columns[:len(values)], values))
In [32]: qry = " and ".join(f"{k} == {v}" for k,v in d.items())
In [33]: res = df.query(qry)
результат:
In [34]: res
Out[34]:
AB CD FG GL
1 34 45 45 87
Пошагово:
In [35]: d = dict(zip(df.columns[:len(values)], values))
In [36]: d
Out[36]: {'AB': 34, 'CD': 45, 'FG': 45}
In [37]: qry = " and ".join(f"{k} == {v}" for k,v in d.items())
In [38]: qry
Out[38]: 'AB == 34 and CD == 45 and FG == 45'
In [39]: df.query(qry)
Out[39]:
AB CD FG GL
1 34 45 45 87