使用滚动窗口熊猫计算百分位数

gab*_*how 2 python percentile dataframe pandas

我创建了一个pandas数据帧

df = pd.DataFrame(data=[[1],[2],[3],[1],[2],[3],[1],[2],[3]])
df
Out[19]: 
   0
0  1
1  2
2  3
3  1
4  2
5  3
6  1
7  2
8  3
Run Code Online (Sandbox Code Playgroud)

我计算长度= 3的窗口的75%百分位数

df.rolling(window=3,center=False).quantile(0.75)
Out[20]: 
     0
0  NaN
1  NaN
2  2.0
3  2.0
4  2.0
5  2.0
6  2.0
7  2.0
8  2.0
Run Code Online (Sandbox Code Playgroud)

然后检查我分别在第一个窗口计算75%

df.iloc[0:3].quantile(0.75)
Out[22]: 
0    2.5
Name: 0.75, dtype: float64
Run Code Online (Sandbox Code Playgroud)

为什么我得到不同的价值?

cs9*_*s95 5

这是一个错误,在GH9413GH16211中引用.

原因,如开发人员所给出的 -

看起来这里的区别在于quantile并且percentile取最近点的加权平均值,而rolling_quantile只使用最近点的一个(没有平均值).

Rolling.quantile 在计算分位数时没有插值.

该错误已修复为0.21.


对于旧版本,修复程序使用的是rolling_apply.

df.rolling(window=3, center=False).apply(lambda x: pd.Series(x).quantile(0.75))

     0
0  NaN
1  NaN
2  2.5
3  2.5
4  2.5
5  2.5
6  2.5
7  2.5
8  2.5
Run Code Online (Sandbox Code Playgroud)