Фильтруйте pandas df на основе некоторых правил в файле yaml - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть файл конфигурации yaml, который должен использоваться клиентами, и его легко редактировать.В файле yaml есть несколько правил:

variables:
  used_often: ['good','bad', 3]

rules:
  - dataframe_name: my_name
    variables: 
      consequence: used_often
    query: 'column_a = 5 and column_b in ${consequence} and column_c != 1'
    output: {'column_d': 1}
  - more rules like this

Как вы можете видеть здесь, я хочу отфильтровать 3 столбца в df my_name, где column_a = 5 и т. Д., А затем в результате этого фильтра добавить/ изменить column_d, чтобы все строки, соответствующие запросу, имели column_d = 1.

Мой вопрос заключается в том, как сделать запрос более простым для фильтрации с помощью панд.В нынешнем виде приведенный выше запрос должен заканчиваться пандами, подобными этим:

my_name[(my_name["column_a"] == 5) &
 (my_name["column_b"].isin(['good','bad', 3])) &
 (my_name["column_c"] != 1)]

Так что мне нужно много обработать, чтобы интерпретировать запрос в yaml.Существуют ли какие-либо инструменты, которые могли бы помочь мне, или более эффективные способы форматирования запроса (у меня есть полная свобода в создании файла yaml, если клиент может его легко написать)?

Спасибо!

1 Ответ

0 голосов
/ 20 ноября 2018

Есть функция pandas.query, которая делает все это https://pandas.pydata.org/pandas-docs/version/0.22/generated/pandas.DataFrame.query.html

Так что мой запрос в yaml становится:

query: 'column_a == 5 and column_b in @consequence and column_c !=1'

, а затем в python я могу прочитать yaml и фильтр:

df.query(my_query)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...