基于其他两个列值的逻辑的新列以查找异常值

时间:2019-11-10 15:27:54

标签: python pandas logic

有没有一种方法可以根据其他列值将逻辑应用于数据框:

I have DF:
Price    Upper_limit      Lower_Limit
10         9.5                 9
5           7                  6 

还有一种添加列outlier的方法,因此必须对每一行进行比较吗?

if Price    < Lower_limit      or      Price    > Upper_limit      :    1
else: 0

预期输出:

Price    Upper_limit      Lower_Limit    Outlier
10         9.5                 9            1
5           7                  6            0

我尝试使用循环和iloc[],但似乎不起作用。

3 个答案:

答案 0 :(得分:0)

能否请您尝试以下。按照@rafaelc

更改了我的解决方案
df['outlier']=(df['Price'].gt(df['Upper_limit']) | df['Price'].lt(df['Lower_Limit'])).astype(int)

输出如下。

    price   Upper_limit Lower_Limit outlier
0   10      9.5         9               1
1   5       6.0         7               0

答案 1 :(得分:0)

outlier = []

static = []

for i in range(len(DF['obs_date'])):

    if DF['Upper_band'].iloc[i] < DF['price'].iloc[i] or DF['price'].iloc[i] < DF['Lower_band'].iloc[i]:

        outlier.append('1')

    else:

        outlier.append('0')    

    if DF['return'].iloc[i] == 0:

        static.append('1')

    else:

        static.append('0')


DF['outlier'] = outlier

DF['static'] = static

这是我当前的[难看!]解决方案,其中包括对附加异常值统计信息的逻辑测试。

答案 2 :(得分:-1)

类似的事情应该起作用:

for index, row in df.iterrows():
   df['Outlier'] = ~(row['Upper_limit'] <= row['Price'] <= row['Lower_limit']) * 1

print(df)