我有一个pandas系列,我想知道一个值是否在前一个值的一定范围内(比如10%以上或以下),如果不在,就用NAN替换。我不知道该怎么办。标准异常值剔除技术主要处理总体标准差等问题。
如何在每个步骤访问上一个值并对其进行操作?

2018-09-06        NaN
2018-09-07        NaN
2018-09-08        NaN
2018-09-09    662.105
2018-09-10    651.010
2018-09-11    454.870
2018-09-12    597.840
2018-09-13    662.405
2018-09-14    660.735
2018-09-15    671.065
2018-09-16    668.485
2018-09-17    666.205
2018-09-18    663.620
2018-09-19    663.320
2018-09-20    662.715
2018-09-21    665.145
2018-09-22    663.015
2018-09-23    663.775
2018-09-24    662.860
2018-09-25    663.315
2018-09-26    665.600
2018-09-27    664.080
2018-09-28    661.800
2018-09-29    659.825
2018-09-30    659.370
2018-10-01        NaN
2018-10-02        NaN
2018-10-03        NaN
2018-10-04        NaN

最佳答案

您可以使用注释中提到的pct_change作为@ALollz。使用Series.loc将不满足条件的值设置为False。

ts.loc[ts.pct_change().abs() > 0.1] = np.nan

2018-09-06        NaN
2018-09-07        NaN
2018-09-08        NaN
2018-09-09    662.105
2018-09-10    651.010
2018-09-11        NaN
2018-09-12        NaN
2018-09-13        NaN
2018-09-14    660.735
2018-09-15    671.065
2018-09-16    668.485
2018-09-17    666.205
2018-09-18    663.620
2018-09-19    663.320
2018-09-20    662.715
2018-09-21    665.145
2018-09-22    663.015
2018-09-23    663.775
2018-09-24    662.860
2018-09-25    663.315
2018-09-26    665.600
2018-09-27    664.080
2018-09-28    661.800
2018-09-29    659.825
2018-09-30    659.370
2018-10-01        NaN
2018-10-02        NaN
2018-10-03        NaN
2018-10-04        NaN

10-04 20:52