python - 将 Pandas 函数同时应用于行和列以进行置信区间计算
问题描述
我是 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
有没有办法可以修改我的原始代码来实现这一点?
解决方案
尝试这个:
m=df.filter(like='Store').lt(df.Lower_Limit,axis=0)|df.filter(like='Store').\
gt(df.Upper_limit,axis=0)
df.update(df.where(~m,0).filter(like='Store'))
print(df)
ID Store1 Store2 Store3 Min Max Lower_Limit Upper_limit
0 123 0 1200 0 800 1200 900 1400
1 246 15 16 45 15 45 11 55
2 234 0 105 180 90 180 100 220
3 236 100 90 0 90 9000 70 140
iloc[]
如果列名没有公共字符串
可以使用编辑:
m=df.iloc[:,1:4].lt(df.Lower_Limit,axis=0)|df.iloc[:,1:4].gt(df.Upper_limit,axis=0)
df.update(df.where(~m,0).iloc[:,1:4])
print(df)
ID Store1 Store2 Store3 Min Max Lower_Limit Upper_limit
0 123 0 1200 0 800 1200 900 1400
1 246 15 16 45 15 45 11 55
2 234 0 105 180 90 180 100 220
3 236 100 90 0 90 9000 70 140
包装在一个函数中:
def calculate_Outliers(df):
m1= df['Store1'].lt(df['Lower_limit'])|df['Store1'].gt(df['Upper_limit'])
m2 = df['Store2'].lt(df['Lower_limit'])|df['Store2'].gt(df['Upper_limit'])
m3= df['Store3'].lt(df['Lower_limit'])|df['Store3'].gt(df['Upper_limit'])
df.loc[m1,'Store1']=0
df.loc[m1,'Store2']=0
df.loc[m1,'Store3']=0
print(df)
calculate_Outliers(df)
ID Store1 Store2 Store3 Min Max Lower_limit Upper_limit
0 123 0 0 0 800 1200 900 1400
1 246 15 16 45 15 45 11 55
2 234 0 0 0 90 180 100 220
3 236 100 90 9000 90 9000 70 140
推荐阅读
- api - Adobe 分析 API v 2
- r - R循环用牛顿法逼近正实数的平方根
- angular - 本机脚本。如何使用 png 图像创建自定义操作栏?
- informatica-powercenter - 在参数文件中设置参数并在同一工作流程中使用
- gradle - 使用 Gradle Kotlin DSL 构建源 jar?
- ms-access - 在 Access VBA 中,如何将自定义命名文件附加到 Outlook?
- python - 获取要删除的行的索引,其中两列为零
- ruby-on-rails - 是否可以将参数传递到模态窗口?需要模态来引用对象
- image - 如何在 Vich Uploader 中提交表单之前显示图像缩略图?
- spring - 模拟原型作用域bean