【问题标题】:calculate percentile using rolling window pandas使用滚动窗口熊猫计算百分位数
【发布时间】:2018-09-02 08:29:12
【问题描述】:

我创建了一个熊猫数据框

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.22 得到正确答案。
  • 我的版本是0.20.1
  • 更新,再试一次..
  • 我会破坏我的代码这样做......新版本的熊猫与过去的版本非常不同......
  • 顺便说一句,你得到了什么...... 2.5 或 2?

标签: python pandas dataframe percentile


【解决方案1】:

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

开发人员给出的原因 -

看起来这里的区别在于 quantilepercentile 采取 最近点的加权平均值,而 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

【讨论】:

  • @gabboshow I; 也添加了解决方法,但请注意,它可能会很慢。
猜你喜欢
  • 1970-01-01
  • 2018-07-10
  • 2022-01-16
  • 2017-05-13
  • 2021-01-18
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多