我的条件怎么了?使用np.where语句标记数据帧

2024-09-24 02:26:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的函数是在没有应用的情况下不断给出红色过滤条件

下面是我使用的函数:

tolerance = 5 
def rag(data):

    red_filter   =  ((data.SHIPMENT_MOT_x == 'VESSEL') & \
                     ((data.latedeliverydate + pd.to_timedelta(tolerance,unit='D')) < data.m6p)) | \
                     ((data.SHIPMENT_MOT_x == 'AIR') & (data.latedeliverydate < data.m6p))

    green_filter =  (data.SHIPMENT_MOT_x == 'VESSEL') & \
                    (data.M6_proposed == data.m6p) & \
                    ((data.latedeliverydate + pd.to_timedelta(tolerance,unit='D')) >= data.m6p) | \
                     ((data.SHIPMENT_MOT_x == 'AIR') & (data.latedeliverydate >= data.m6p))

    amber_filter =  (data.SHIPMENT_MOT_x == 'VESSEL') & \
                    (data.M6_proposed != data.m6p) & \
                    ((data.latedeliverydate + pd.to_timedelta(tolerance,unit='D')) >= data.m6p) | \
                    ((data.SHIPMENT_MOT_x == 'AIR') & (data.latedeliverydate >= data.m6p)) 



data['RAG'] = np.where(green_filter, 'G', np.where(amber_filter, 'A', np.where(red_filter, 'R', '')))

Tags: todatanpunitairfilterwheretolerance
1条回答
网友
1楼 · 发布于 2024-09-24 02:26:30

如果你们感兴趣的话,这里有一个解决方案。 np.where很有用,但在存在多个条件时不建议使用

def pmm_rag(data):

    if  ((data.MOT== 'VESSEL') & ((data.m0p + pd.to_timedelta(tolerance,unit='D')) < data.m6p)) | ((data.SHIPMENT_MOT_x == 'AIR') & (data.m0p < data.m6p)):
        return 'R'
    elif (data.MOT== 'VESSEL') & (data.M6_proposed == data.m6p) & ((data.m0p + pd.to_timedelta(tolerance,unit='D')) >= data.m6p) | ((data.MOT== 'AIR') & (data.m0p >= data.m6p)):
        return 'G'
    elif (data.MOT== 'VESSEL') & (data.M6_proposed != data.m6p) & ((data.m0p + pd.to_timedelta(tolerance,unit='D')) >= data.m6p) | ((data.MOT== 'AIR') & (data.m0p >= data.m6p)):
        return 'A'
    else:
        return ''

相关问题 更多 >