回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我是python编程新手。
我试图确定我的数据集中的异常值。我已经将数据集转换为一个数据帧,然后应用IQR原理。
在那之后,我想用零代替我的离群值,然后计算平均值和标准差作为离群值,作为平均值和标准差的偏差。你知道吗</p>
<hr/>
<p>数据集代码如下:</p>
<pre><code>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)
</code></pre>
<hr/>
<p>数据集代码段:</p>
<pre><code> 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
</code></pre>
<p>如果Store1、Store2、Store3的值小于Lower\u limit(['Store1']<;['Lower\u limit'])或大于Upper\u limit(['Store1']>;['Upper\u limit']),我想将它们更新为零(0)。你知道吗</p>
<hr/>
<p>以下是我的职责:</p>
<pre><code>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']
</code></pre>
<hr/>
<p>我是这样应用的:</p>
<pre><code>df['Store1','Store3','Store3'] = df.apply(calculate_Outliers, axis=1)
</code></pre>
<hr/>
<p>下面是错误的结果。。。你知道吗</p>
<pre><code> 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
</code></pre>
<hr/>
<pre><code>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
</code></pre>
<p>有没有一种方法可以让我修改我的原始代码来实现这一点?你知道吗</p>