Я имею DataFrame произвольной длины, с X столбцов (позволяет сказать, 10):фильтр панды DataFrame через список dicts
>>> names = ['var_' + str(x) for x in range(1, 11)]
>>> names
['var_1', 'var_2', 'var_3', 'var_4', 'var_5', 'var_6', 'var_7', 'var_8', 'var_9', 'var_10']
>>> df = pd.DataFrame(np.random.randint(100, size=(10,10)), columns = names)
>>> df
var_1 var_2 var_3 var_4 var_5 var_6 var_7 var_8 var_9 var_10
0 39 49 6 39 16 41 8 86 23 52
1 6 16 21 20 81 97 83 25 56 73
2 72 97 43 50 10 46 22 75 7 18
3 20 35 69 59 14 24 57 31 47 20
4 39 93 45 80 74 87 83 50 52 67
5 93 75 83 67 40 46 79 11 31 95
6 75 76 57 82 69 98 74 75 93 13
7 35 19 28 67 39 23 72 16 63 67
8 93 87 52 25 63 29 46 64 78 12
9 81 43 4 90 88 64 1 83 26 22
Теперь я хочу, чтобы отфильтровать DataFrame построчно, используя список dicts:
>>> test_dict_1 = {'var_1': 89, 'var_2': 12, 'var_3': 34}
>>> test_dict_2 = {'var_7': 3, 'var_2': 11, 'var_4': 19, 'var_1': 9}
>>> test_dict_3 = {'var_3': 31}
>>> filter = [test_dict_1, test_dict_2, test_dict_3]
Чтобы получить что-то в результате (dict? DataFrame? Few DataFrames?), Который содержит только те строки, по крайней мере, один из переданного фильтра (т.е. все переменные имеют одинаковые значения в строке, как в фильтре). Кроме того, я должен знать, какие фильтры прошли.
Я совершенно новичок в пандах, поэтому я немного смущен, если я могу сделать это без циклов «за». Любые решения, пожалуйста?
Я знаю о цепных решениях, таких как df [(df.A == 1) & (df.D == 6)], но как-то возможно иметь несколько разных фильтров? Конечная цель состоит в том, чтобы каждая строка помечена фильтрами, без петель.
Thats for one dict, и да, я упомянул об этом решении в своем вопросе. Я говорю о фильтрации со списком dicts, то есть с несколькими подобными dicts. Я думаю, что мне нужно использовать цикл. – loknar