使用熊猫准确计算滚动窗口上的分位数

时间:2019-05-17 23:01:31

标签: python pandas quantile rolling-computation

我正在尝试计算滚动窗口中每一行的分位数(在此示例中为五分位数),该滚动窗口至少包含10个数据点,并且最多可以包含完整的数据集。

请注意,我使用的是滚动窗口,因此在给定行之后出现的行不包括在分位数计算中。当原始输入数据进行排序时,我的代码工作正常,但是当原始输入数据未排序时,代码似乎无法正常工作-即使我在apply函数中使用了pd.Series.sort_values。非常感谢您的指导。

import pandas as pd

raw_data = {'data'  : [1, 5, 3, 2, 8, 6, 7, 10, 9, 4]*2}
df = pd.DataFrame(raw_data, columns = ['data'])

Quintiles = df['data'].rolling(window=len(df.index), min_periods=10, center=False).apply(lambda x: pd.Series(x).sort_values(axis=0, ascending=True, inplace=False, kind='mergesort', na_position='first')[pd.qcut(x, 5, labels=range(0,5), duplicates='drop')].iloc[-1])

df = df.assign(Quintiles=Quintiles.values)
print(df)

我目前生成以下输出,其中当标签已被限制在0和5之间时,包含非意义的值(例如8)。

    data  Quintiles
0      1        NaN
1      5        NaN
2      3        NaN
3      2        NaN
4      8        NaN
5      6        NaN
6      7        NaN
7     10        NaN
8      9        NaN
9      4        5.0
10     1        1.0
11     5        3.0
12     3        5.0
13     2        1.0
14     8        2.0
15     6        3.0
16     7        2.0
17    10        8.0
18     9        8.0
19     4        5.0

同样,当对原始数据进行排序时,将精确生成分位数。感谢您帮助我查看代码中的错误。

0 个答案:

没有答案