我有一个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