gpt4 book ai didi

python - Pandas 中的滚动百分比排名

转载 作者:行者123 更新时间:2023-12-01 01:23:16 24 4
gpt4 key购买 nike

以下是我的数据框。我正在尝试计算 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 行开始,我想将百分比排名函数应用于组内 ATR 的所有 5 个先前值(第 1 行到第 5 行)。从第 6 行开始,我想再次将排名函数应用于 ATR 的所有 5 个先前值(第 2 行到第 6 行)。我尝试了以下方法,给出了“'numpy.ndarray'对象没有属性'rank'”错误。

df['RollingPercentRank'] = df.groupby(['symbol'])['ATR'].rolling(window=5,min_periods=5,center=False).apply(lambda x: x.rank(pct=True)).reset_index(drop=True)

最佳答案

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

因为 x 是一个 numpy 数组,所以使用 twice argsort 可以获得相同的结果。并创建列,在末尾添加 reset_index:

win_val = 5
df['RollingPercentRank'] = (df.groupby(['symbol'])['ATR']
.rolling(window=win_val,min_periods=5,center=False)
.apply(lambda x: x.argsort().argsort()[-1]+1)
.reset_index(level=0,drop=True)/win_val)

print (df)
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.6
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.2
316367 AAPL 11/29/2018 11:30:00 0.373627 0.2

关于python - Pandas 中的滚动百分比排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53584774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com