【发布时间】:2017-12-02 00:53:53
【问题描述】:
我最近遇到了一个关于 pandas 滚动功能的意外问题。 rolling_quantile 例如:
>> row = 10
>> col = 5
>> idx = pd.date_range(20100101,periods=row,freq='B')
>> a = pd.DataFrame(np.random.rand(row*col).reshape((row,-1)),index=idx)
>> a
0 1 2 3 4
2010-01-01 0.341434 0.497274 0.596341 0.259909 0.872207
2010-01-04 0.222653 0.056723 0.064019 0.936307 0.785647
2010-01-05 0.179067 0.647165 0.931266 0.557698 0.713282
2010-01-06 0.049766 0.259756 0.945736 0.380948 0.282667
2010-01-07 0.385036 0.517609 0.575958 0.050758 0.850735
2010-01-08 0.628169 0.510453 0.325973 0.263361 0.444959
2010-01-11 0.099133 0.976571 0.602235 0.181185 0.506316
2010-01-12 0.987344 0.902289 0.080000 0.254695 0.753325
2010-01-13 0.759198 0.014548 0.139858 0.822900 0.251972
2010-01-14 0.404149 0.349788 0.038714 0.280568 0.197865
>> a.quantile([0.25,0.5,0.75],axis=0)
0 1 2 3 4
0.25 0.189963 0.282264 0.094964 0.255999 0.323240
0.50 0.363235 0.503864 0.450966 0.271964 0.609799
0.75 0.572164 0.614776 0.600761 0.513510 0.777567
>> np.percentile(a,[25,50,75],axis=0)
[array([ 0.18996316, 0.28226404, 0.09496441, 0.25599853, 0.32323997]),
array([ 0.36323529, 0.50386356, 0.45096554, 0.27196429, 0.60979881]),
array([ 0.57216415, 0.61477607, 0.6007611 , 0.51351021, 0.7775667 ])]
>> pd.rolling_quantile(a,row,0.25).tail(1)
0 1 2 3 4
2010-01-14 0.179067 0.259756 0.08 0.254695 0.282667
看起来 pandas.DataFrame.quantile 成员函数与 numpy.percentile 函数一致。但是 pandas.rolling_quantile 函数返回差异结果。将行数减少到 5,问题就会消失(所有三种方法都返回相同的结果)。有什么想法吗?
ps:我还测试了 rolling_std 函数,它将“随机”生成 10^-7 ~ 10^-8 尺度的长(按行)pandas.DataFrames 的错误
python环境:
- python 3.4.2
- cython 0.21.1
- numpy 1.8.2
- scipy 0.14.0
- 熊猫 0.15.1
- statsmodels 0.6.0
【问题讨论】:
-
我投票结束这个问题,因为这是一个熊猫错误,所以应该在 github 上提交:github.com/pydata/pandas/issues
-
一开始我不确定这是否是一个错误。由于没有人可以在这里回答,我在 github 上提交了一个新问题。还是谢谢
-
不会伤害到 xpost :),我承认我没有看得太仔细(稍后再看)
标签: python numpy pandas statsmodels