Как получить строки с фильтрацией по нескольким столбцам и условиям?

Имеется 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
→ Ссылка