0

我正在做除法的值为0,这似乎会引发错误。如何避免此错误

 wt     pred wt  remarks
  0      14      Anomaly
  0      20      Anomaly
  25     30      Anomaly
  22     21      Anomaly
  21     102     Anomaly


     def valuation_formula(x,y):
         if float(abs(x-y)/y*100) > 25.0:
            return "Anomaly"
         else :
            return "Pass"

     try:
        df_Wt['Weight_Remarks'] = df_Wt.apply(lambda row: 
        valuation_formula(row['Predicted Weight'], row['Weight']), axis=1)

     except ZeroDivisionError:
        df_Wt['Weight_Remarks'] = "Anomaly"

新列仅填充“异常”我如何更正上面的代码

预期产出

            wt      pred wt  remarks
            0        14      Anomaly
            0        20      Anomaly
           25        30      Pass
           22        21      Pass
           21        102     Anomaly
4

3 回答 3

2
df['remarks'] = np.where(((abs(df['pred wt']-df['wt']))/df['wt']).gt(0.25), "Weight Anomaly", 'Pass')
于 2019-08-16T08:29:10.947 回答
0

使用numpy.where

import numpy as np

df['new_remarks'] = np.where(df['wt'].ne(0), df['pred wt']/df['wt'], 'Anomaly')
print(df)

输出:

   wt  pred wt  remarks         new_remarks
0   0       14  Anomaly             Anomaly
1   0       20  Anomaly             Anomaly
2  25       30  Anomaly                 1.2
3  22       21  Anomaly  0.9545454545454546
于 2019-08-16T08:11:42.677 回答
0

试试这个代码

df['remarks']= np.where(df.wt.div(df.pred,fill_value=1).eq(0),'Anamoly',np.where(((abs(df['pred']-df['wt']))/df['wt']).lt(0.25), "Weight Anomaly", 'Pass'))

我认为您放置的输出与功能不匹配。至少其中一个值应该是“Weight Anamoly”。调整lt(0.25)以获得您想要的结果。lt 代表“小于”,您可以将其更改为“gt”(大于)以满足您的需要

于 2019-08-16T08:46:30.067 回答