首页 > 解决方案 > 如何为 Python Pandas 数据框制作灵活的命令过滤器

问题描述

我有以下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, '&'],
    }

并且能够执行刚性功能中的功能。

标签: pythonpython-3.xpandasfilterfunctional-programming

解决方案


这是完美的用例query

df.query((''.join([''.join(map(str,x)) for x in command_dict.values()])).strip('&'))

推荐阅读