Python 使用滚动窗口计算百分位

Python 使用滚动窗口计算百分位,python,pandas,dataframe,percentile,Python,Pandas,Dataframe,Percentile,我创建了一个数据帧作为 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 我计算长度为3的窗口的75%百分位数 df.rolling(window=3,center=False).quantile(0.75) Out[20]: 0 0 NaN 1 NaN 2 2.0 3 2.0

我创建了一个数据帧作为

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
我计算长度为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
然后,为了检查,我分别计算了第一个窗口的75%

df.iloc[0:3].quantile(0.75)
Out[22]: 
0    2.5
Name: 0.75, dtype: float64

为什么会得到不同的值?

这是一个错误,在和中引用

开发人员给出的理由如下:

这里的区别似乎是
分位数
百分位数
采用 最近点的加权平均值,而滚动分位数 只需使用一个最接近的点(无平均值)

滚动。分位数
在计算分位数时未插值

从0.21开始,该错误已修复


对于较旧版本,修复程序使用
滚动应用

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

你的熊猫是什么版本的?我认为这是一个错误,我在0.22上得到了正确的答案。我有版本0.20.1更新,然后再试一次。这样做我会破坏我的代码…新版本的熊猫与以前的版本非常不同…顺便问一下,你得到了什么。。。2.5还是2?@gabboshow I;'我们也添加了一个变通方法,但要小心,它可能会很慢。