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;'我们也添加了一个变通方法,但要小心,它可能会很慢。