【发布时间】:2017-11-01 03:24:58
【问题描述】:
我的代码检测时间序列中的异常值。我想要做的是将第一个数据框列中的异常值替换为之前不是异常值的值。
这段代码只是检测异常值,创建一个布尔数组,其中:
-
True表示数据框中的值是异常值 -
False表示数据框中的值不是异常值
series = read_csv('horario_completo.csv', header=None, squeeze=True) df=pd.DataFrame(series) from pandas import rolling_median consumos=df.iloc[:,0] df['rolling_median'] = rolling_median(consumos, window=48, center=True).fillna(method='bfill').fillna(method='ffill') threshold =50 difference = np.abs(consumos - df['rolling_median']) outlier = difference > threshold
到目前为止,一切正常。
我想到的下一步是创建一个掩码,将Truevalues 替换为同一列的前一个值(如果可以的话,它会比循环快得多)。
我将尝试用一个小例子来解释它:
这就是我所拥有的:
index consumo
0 54
1 67
2 98
index outlier
0 False
1 False
2 True
这就是我想做的:
index consumo
0 54
1 67
2 67
我想我应该像这样创建一个面具:
df.mask(outlier, df.columns=[[0]][i-1],axis=1)
显然这不是写它的方式。这只是关于我认为可以如何完成的解释(我说的是 [i-1])。
【问题讨论】:
标签: python pandas dataframe series outliers