我正在尝试使用python进行异常检测,其滚动窗口值为8天,以计算两个指标(err_precent和fail precent)的四分位间距。 examples provided似乎每个时间戳/索引只有一个值,在我的情况下,我有很多。
我的数据如下:
customerID err_precent fail_precent
end_date
2019-05-02 29616 0.857143 1.000000
2019-05-02 277023 1.000000 1.000000
2019-05-02 150560 1.000000 1.000000
2019-05-02 88778 1.000000 1.000000
... ... ... ...
2019-06-10 67311 1.000000 1.000000
2019-06-10 128116 1.000000 1.000000
2019-06-10 264288 0.935484 1.000000
2019-06-10 199984 0.941176 1.000000
2019-06-10 444105 0.952381 0.857143
2019-06-10 388703 0.894737 0.947368
2019-06-10 138986 1.000000 1.00000
在数据列上滚动之后,我可以看到每天都有很多值。问题是:我是否可以每8天使用所有值来计算一个分位数,而不是像下面那样为每个客户分配分位数?
err_precent fail_precent
end_date
2019-05-02 0.857143 1.000000
2019-05-03 0.900000 0.880000
2019-05-04 0.900000 0.880000
...
2019-06-10 0.857143 0.941176
df.index = pd.to_datetime(df.end_date, format='%m/%d/%Y')
df[dataColumn].rolling('8D', min_periods =1 ).quantile(.25, interpolation = 'lower')
不希望的结果,如您所见,每天返回许多分位数。
err_precent fail_precent
end_date
2019-05-02 0.857143 1.000000
2019-05-02 0.857143 1.000000
2019-05-02 0.857143 1.000000
2019-05-02 0.857143 1.000000
2019-05-02 1.000000 1.000000
2019-05-02 0.941176 1.000000
2019-05-02 0.941176 1.000000
2019-05-02 0.857143 0.941176
2019-05-02 0.923077 1.000
... ... ...
2019-06-10 0.900000 0.880000
2019-06-10 0.900000 0.880000
2019-06-10 0.900000 0.880000
2019-06-10 0.900000 0.880000
2019-06-10 0.900000 0.880000
2019-06-10 0.900000 0.880000
2019-06-10 0.900000 0.880000
2019-06-10 0.900000 0.880000
答案 0 :(得分:0)
我通过重采样找到了解决此问题的方法,首先通过重采样计算每天的分位数,然后对前8天进行滚动平均。
lb = df[dataColumn].resample("1d").quantile(.25).fillna(0).rolling(window=8).mean()