Как сделать гибкий фильтр команд для Python Pandas dataframe - PullRequest
1 голос
/ 07 мая 2019

У меня есть следующий df:

Это количество прописанного лекарства до и после даты индекса пациента.

PREINDEX_N_DRUG_A_TAG   POSTINDEX_N_DRUG_A_TAG  PREINDEX_N_DRUG_B_TAG   POSTINDEX_N_DRUG_B_TAG  PREINDEX_N_DRUG_C_TAG   POSTINDEX_N_DRUG_C_TAG
                    0                       8                   0                   8                       0                       8
                    0                       2                   4                   0                       8                       4
                    2                       0                   0                   4                       3                       5

Мне нравится фильтровать пациентов по различным комбинациям и критериям.

Я сделал жесткую функцию следующим образом:

def filter_data(df):
    df = df[
        (df['PREINDEX_N_DRUG_A_TAG']>8) &
        (df['POSTINDEX_N_DRUG_A_TAG']==2) &
        (df['PREINDEX_N_DRUG_B_TAG']==0) &
        (df['POSTINDEX_N_DRUG_B_TAG']>=2)
        ]

Тем не менее, я хочу сделать функцию более гибкой, чтобы пользователи могли указать, сколько критериев и форма критериев.

Например, я бы хотел, чтобы функция использовала command_dict информацию, такую ​​как

command_dict = {
    'Command1': ['PREINDEX_N_DRUG_A_TAG', '>', 8, '&'],
    'Command2': ['POSTINDEX_N_DRUG_A_TAG', '==', 2, '&'],
    'Command3': ['PREINDEX_N_DRUG_B_TAG', '==', 0, '&'],
    'Command4': ['POSTINDEX_N_DRUG_B_TAG', '>=', 2, '&'],
    'Command5': ['PREINDEX_N_DRUG_A_TAG', '>', 8, '&'],
    'Command6': ['PREINDEX_N_DRUG_A_TAG', '>', 8, '&'],
    }

И сможет выполнять функцию как в жесткой функции.

1 Ответ

2 голосов
/ 07 мая 2019

Это идеальный вариант использования для query

df.query((''.join([''.join(map(str,x)) for x in command_dict.values()])).strip('&'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...