当自变量列具有特定值时,从目标列中去除异常值
Remove outliers from the target column when an independent variable column has a specific value
我有一个如下所示的数据框(点击下面的链接):
df.head(10)
我想做的是在日期列的值等于 6 时从目标列 (occupied_parking_spaces) 中删除异常值,例如指的是星期日 (df['day'] == 6) 使用正态分布 68-95-99.7 规则。
我尝试了以下代码:
df = df.mask((df['occupied_parking_spaces'] - df['occupied_parking_spaces'].mean()).abs() > 2 * df['occupied_parking_spaces'].std()).dropna()
这行代码从整个数据集中删除异常值,无论自变量如何,但我只想从 occupied_parking_spacs 列中删除异常值,例如天值等于 6。
我能做的是创建一个不同的数据框,我将为其删除异常值:
sunday_df = df.loc[df['day'] == 0]
sunday_df = sunday_df.mask((sunday_df['occupied_parking_spaces'] - sunday_df['occupied_parking_spaces'].mean()).abs() > 2 * sunday_df['occupied_parking_spaces'].std()).dropna()
但是通过这样做,我将获得一周中每天的多个数据帧,我必须在最后连接这些数据帧,这是我不想做的事情,因为必须有一种方法可以在相同的数据框。
你能帮帮我吗?
定义了一些函数来移除异常值后,您可以使用 np.where
有选择地应用它:
import numpy as np
df = np.where(df['day'] == 0,
remove_outliers(df['occupied_parking_spaces']),
df['occupied_parking_spaces']
)
我有一个如下所示的数据框(点击下面的链接):
df.head(10)
我想做的是在日期列的值等于 6 时从目标列 (occupied_parking_spaces) 中删除异常值,例如指的是星期日 (df['day'] == 6) 使用正态分布 68-95-99.7 规则。
我尝试了以下代码:
df = df.mask((df['occupied_parking_spaces'] - df['occupied_parking_spaces'].mean()).abs() > 2 * df['occupied_parking_spaces'].std()).dropna()
这行代码从整个数据集中删除异常值,无论自变量如何,但我只想从 occupied_parking_spacs 列中删除异常值,例如天值等于 6。
我能做的是创建一个不同的数据框,我将为其删除异常值:
sunday_df = df.loc[df['day'] == 0]
sunday_df = sunday_df.mask((sunday_df['occupied_parking_spaces'] - sunday_df['occupied_parking_spaces'].mean()).abs() > 2 * sunday_df['occupied_parking_spaces'].std()).dropna()
但是通过这样做,我将获得一周中每天的多个数据帧,我必须在最后连接这些数据帧,这是我不想做的事情,因为必须有一种方法可以在相同的数据框。
你能帮帮我吗?
定义了一些函数来移除异常值后,您可以使用 np.where
有选择地应用它:
import numpy as np
df = np.where(df['day'] == 0,
remove_outliers(df['occupied_parking_spaces']),
df['occupied_parking_spaces']
)