有没有一种方法可以根据其他列值将逻辑应用于数据框:
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[]
,但似乎不起作用。
答案 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)