我是 python 编程的新手。我正在尝试确定我的数据集中的异常值。我已将数据集转换为 pandas 数据框,然后应用 IQR 原理。之后,我想用零替换我的异常值,然后计算平均值和标准差作为异常值,因为偏离平均值和 SD。
数据集代码如下:
import pandas as pd
data = [[123,100,1200,800,800,1200,900,1400],[246,15,16,45,15,45,11,55],[234,90,105,180,90,180,100,220],[236,100,90,9000,90,9000,70,140]]
df = pd.DataFrame(data,columns=['ID','Store1','Store2','Store3','Min','Max','Lower_Limit','Upper_limit'])
print (df)
数据集片段:
ID Store1 Store2 Store3 Min Max Lower_Limit Upper_limit
123 100 1200 800 800 1200 900 1400
246 15 16 45 15 45 11 55
234 90 105 180 90 180 100 220
236 100 90 9000 90 9000 70 140
如果 Store1,Store2,Store3 的值小于 Lower_limit(['Store1'] < ['Lower_limit']) 或大于 Upper_limit(['Store1'] > ['Upper_limit' ])。
以下是我的功能:
def calculate_Outliers(row):
if row['Store1'] < row['Lower_limit'] or row['Store1'] > row['Upper_limit']:
return 0
else:
return row['Store1']
if row['Store2'] < row['Lower_limit'] or row['Store2'] > row['Upper_limit']:
return 0
else:
return row['Store2']
if row['Store3'] < row['Lower_limit'] or row['Store3'] > row['Upper_limit']:
return 0
else:
return row['Store3']
我这样应用它:
df['Store1','Store3','Store3'] = df.apply(calculate_Outliers, axis=1)
下面是错误的结果...
ID Store1 Store2 Store3(Store1 Store2 Store3)
ID
123 NaN NaN NaN NaN 1000
246 NaN NaN NaN NaN 15
234 NaN NaN NaN NaN 0
236 NaN NaN NaN NaN 0
Desired Result:
ID Store1 Store2 Store3 Min Max Lower_Limit Upper_limit
123 100 1200 800 800 1200 900 1400
246 15 16 45 15 45 11 55
234 0 105 180 90 180 100 220
236 100 90 0 90 9000 70 140
有没有办法可以修改我的原始代码来实现这一点?