Pandas中的滚动百分位排名

2024-09-30 18:14:54 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是我的数据帧。我试图计算ATR的滚动5周期百分比秩。RollingPercentRank是我想要的输出。在

       symbol         Day      time       ATR  RollingPercentRank
316356    SPY  11/29/2018  10:35:00  0.377880                 NaN
316357    SPY  11/29/2018  10:40:00  0.391092                 NaN
316358    SPY  11/29/2018  10:45:00  0.392983                 NaN
316359    SPY  11/29/2018  10:50:00  0.399685                 NaN
316360    SPY  11/29/2018  10:55:00  0.392716                 0.2
316361    SPY  11/29/2018  11:00:00  0.381445                 0.2
316362   AAPL  11/29/2018  11:05:00  0.387300                 NaN
316363   AAPL  11/29/2018  11:10:00  0.390570                 NaN
316364   AAPL  11/29/2018  11:15:00  0.381313                 NaN
316365   AAPL  11/29/2018  11:20:00  0.398182                 NaN
316366   AAPL  11/29/2018  11:25:00  0.377364                 0.6
316367   AAPL  11/29/2018  11:30:00  0.373627                 0.2

从第5行开始,我想将percentrank函数应用于一个组中ATR的所有5个先前值(第一行到第五行)。从第6行开始,我想再次将rank函数应用于ATR之前的5个值(第2行到第6行)。 我试过下面的一个“'努比·恩达雷“object没有属性‘rank’”错误。在

^{pr2}$

Tags: 数据函数objecttimenansymbol百分比rank
1条回答
网友
1楼 · 发布于 2024-09-30 18:14:54

IIUC因为我没有得到您所显示的预期输出,但是要使用rank,您需要一个pd.Series,然后您只需要5个元素的百分比系列的最后一个值,因此它将是:

print (df.groupby(['symbol'])['ATR']
         .rolling(window=5,min_periods=5,center=False)
         .apply(lambda x: pd.Series(x).rank(pct=True).iloc[-1]))

symbol  i     
AAPL    316362    NaN
        316363    NaN
        316364    NaN
        316365    NaN
        316366    0.2
        316367    0.2
SPY     316356    NaN
        316357    NaN
        316358    NaN
        316359    NaN
        316360    0.6
        316361    0.2

因为xix是numpy数组,所以可以使用twice ^{}获得相同的结果,并在末尾创建列reset_index

^{pr2}$

相关问题 更多 >