首页 > 解决方案 > 在列中使用多个条件来准备分析

问题描述

我使用以下条件来准备数据框进行分析。

def DAYS(DF_FRAME_NAME):
    if (DF_FRAME_NAME['Column1'] == 'Yes' and (DF_FRAME_NAME['DAYS'] == 1)):
        return 3
    elif (DF_FRAME_NAME['Column1'] == 'Yes' and (DF_FRAME_NAME['DAYS'] == 2)):
        return 3
    if (DF_FRAME_NAME['Column2'] == 'YES' and (DF_FRAME_NAME['DAYS'] == 1)):
        return 3
    elif (DF_FRAME_NAME['Column2'] == 'YES' and (DF_FRAME_NAME['DAYS'] == 2)):
        return 3
    elif (DF_FRAME_NAME['Column2'] == 'YES' and (DF_FRAME_NAME['DAYS'] == 3)):
        return 5
    elif (DF_FRAME_NAME['Column2'] == 'YES' and (DF_FRAME_NAME['DAYS'] == 4)):
        return 5
    elif (DF_FRAME_NAME['Column2'] == 'YES' and (DF_FRAME_NAME['DAYS'] == 5)):
        return 5
    elif (DF_FRAME_NAME['Column1'] != 'Yes'):
        return DF_FRAME_NAME['DAYS']
    elif (DF_FRAME_NAME['Column2']) != 'YES':
        return DF_FRAME_NAME['DAYS']
df['DAYS'] = df.apply(DAYS, axis =1)

上述函数会消耗时间,因此在@deadshot 的帮助下,我将代码重写如下:

DF['DAYS']=np.where((DF['column1'].eq('Yes')) &(DF['DAYS'].eq(1)),3,DF[‘DAYS’])
    DF[‘DAYS’]=np.where((DF[‘column1’].eq('Yes')) & (DF[‘DAYS’].eq(2)),3,DF[‘DAYS’])
    DF[‘DAYS’]=np.where((DF[‘column2’].eq('YES')) & (DF[‘DAYS’].eq(1)),3,DF[‘DAYS’])
    DF[‘DAYS’]=np.where((DF[‘column2’].eq('YES')) & (DF[‘DAYS’].eq(2),3,DF[‘DAYS’])
    DF[‘DAYS’]=np.where((DF[‘column2’].eq('YES')) & (DF[‘DAYS’].eq(3)),5,DF[‘DAYS’])
    DF[‘DAYS’]=np.where((DF[‘column2’].eq('YES')) & (DF[‘DAYS’].eq(5)),5,DF[‘DAYS’])
    DF[‘DAYS’]=np.where((DF[‘column2’].eq('YES')) & (DF[‘DAYS’].eq(5)),5,DF[‘DAYS’])
    DF[‘DAYS’]=np.where(DF[‘column1’].eq('No'),DF[‘DAYS’],1)
    DF[‘DAYS’]=np.where(DF[‘column2’].eq('No'),DF[‘DAYS’],1)

当应用于超过 200,000 行的数据帧时,上述代码的性能要快得多。但这是正确的方法吗?我可以在 where 函数中使用自定义函数吗?请帮助如何编写更有吸引力的上述代码,因为有许多条件适用于同一列。

标签: python-3.xpandas

解决方案


推荐阅读