1
我的代码检测时间序列中的异常值。我想要做的是将第一个数据帧列中的异常值替换为以前的值,这不是异常值。用前一个替换pandas dataframe列中的值
此代码只是检测离群值,创建布尔阵列,其中:
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
到目前为止,一切正常。
我已经想好了下一个步骤是创建一个面具与同列的前值来取代True
值(如果这是可能的,这将是比让一个循环更快)。
我会试着用一个小例子来解释它:
这是我有:
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])。
我不知道转移的存在,并()。这真的很有用。你的答案很清楚,效果很好。非常感谢你。 – Jvr
很高兴可以帮助,美好的一天! – jezrael