<p>试试这个:</p>
<pre><code>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
</code></pre>
<p>编辑
如果列名没有公共字符串,则可以使用<code>iloc[]</code>:</p>
<pre><code>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
</code></pre>
<p>在函数中换行:</p>
<pre><code>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
</code></pre>