Python 什么';我的条件不对吗?使用np.where语句标记数据帧

Python 什么';我的条件不对吗?使用np.where语句标记数据帧,python,python-3.x,pandas,Python,Python 3.x,Pandas,我使用的函数是在未应用的情况下不断给出红色过滤器条件 下面是我正在使用的函数: tolerance = 5 def rag(data): red_filter = ((data.SHIPMENT_MOT_x == 'VESSEL') & \ ((data.latedeliverydate + pd.to_timedelta(tolerance,unit='D')) < data.m6p)) | \

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

下面是我正在使用的函数:

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', '')))
公差=5
def rag(数据):
红色过滤器=((data.shipping\u MOT\u x==‘船只’)和\
((data.latedeliverydate+pd.to_timedelta(公差,单位为D'))=data.m6p)|\
((data.shipping\u MOT\u x==“AIR”)和(data.latedeliverydate>=data.m6p))
琥珀色过滤器=(data.shipping\u MOT\u x=='VESSEL')&\
(data.M6_建议!=data.m6p)和\
((data.latedeliverydate+pd.to_timedelta(公差,单位为D'))>=data.m6p)|\
((data.shipping\u MOT\u x==“AIR”)和(data.latedeliverydate>=data.m6p))
数据['RAG']=np.where(绿色过滤器'G',np.where(琥珀色过滤器'A',np.where(红色过滤器'R',''))

如果你们感兴趣,这里是解决方案。
np.其中
很有用,但在存在多个条件时不推荐使用

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 ''
def pmm_rag(数据):
如果((data.MOT=='VESSEL')和((data.m0p+pd.to_timedelta(公差,unit='D'))=data.m6p)|((data.MOT==''AIR')和(data.m0p>=data.m6p)):
返回“G”
elif(data.MOT=='VESSEL')和(data.m6p!=data.m6p)和((data.m0p+pd.to_-timedelta(公差,单位为D'))>=data.m6p)|((data.MOT='AIR')和(data.m0p>=data.m6p)):
返回“A”
其他:
返回“”

我最好坚持使用本机机制,例如查询和where。您有太多不必要的括号,这会影响可读性,但红色过滤器的条件似乎还可以:
(MOT==容器和(延迟日期+公差