我正在尝试计算滚动窗口中每一行的分位数(在此示例中为五分位数),该滚动窗口至少包含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
同样,当对原始数据进行排序时,将精确生成分位数。感谢您帮助我查看代码中的错误。