我想将pandas qcut应用于滚动窗口。我不确定该怎么做...的想法是花最近20天的时间,找到落在上四分位数中的值,找到上四分位数中值的平均值。并返回该一个滚动时间序列的平均值。

所以如果我有

s = pd.Series([5,6,10,12,13,13,20,21,22])
s.rolling(2,2).apply(lambda x: pd.qcut(x,5))


这导致

0   NaN
1   NaN
2   NaN
3   NaN
4   NaN
5   NaN
6   NaN
7   NaN
8   NaN
dtype: float64


如何获得每个时间序列的qcut间隔?谢谢。注意,在示例中,我有一个为期2天的滚动窗口。只是为了简化事情

最佳答案

我认为您可以通过在apply中选择与最高四分位数相对应的x来实现。使用rolling为6和q=4可以执行以下操作:

print (s.rolling(6,6).apply(lambda x: x[pd.qcut(x, q=4, labels=[1,2,3,4]) == 4].mean()))
0     NaN
1     NaN
2     NaN
3     NaN
4     NaN
5    13.0
6    20.0
7    20.5
8    21.5
dtype: float64


我使用labels参数能够选择更高的四分位数(此处为名称4),每次滚动将具有不同的值,因此不确定如何做不同的事情。

关于python - 将qcut应用于滚动分析,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54813615/

10-16 03:10