在此工作表中,我需要添加一列Av。 TR和我想计算平均TR。对于平均TR计算:-
前10天为参考。
所以连续10天TR为:-
平均TR =前10天TR和随后几天的平均值AV。 TR为
FORMULA:平均TR = [(前一天的ATR * 9)+(当天的TR)] / 10。
我必须按Av。分组TR按“符号”也。这该怎么做?我尝试在熊猫滚动功能,但无法达到目的。
INSTRUMENTS SYMBOL TIMESTAMP TR FUTIDX BANKNIFTY 6/1/2020 729.8 FUTIDX BANKNIFTY 6/2/2020 834 FUTIDX BANKNIFTY 6/3/2020 1145.2 FUTIDX BANKNIFTY 6/4/2020 846.7 FUTIDX BANKNIFTY 6/5/2020 812.5 FUTIDX BANKNIFTY 6/8/2020 904.6 FUTIDX BANKNIFTY 6/9/2020 1014 FUTIDX BANKNIFTY 6/10/2020 660 FUTIDX BANKNIFTY 6/11/2020 796 FUTIDX BANKNIFTY 6/12/2020 1173 FUTIDX BANKNIFTY 6/15/2020 969 FUTIDX BANKNIFTY 6/16/2020 271 FUTIDX NIFTY 6/1/2020 207 FUTIDX NIFTY 6/2/2020 230 FUTIDX NIFTY 6/3/2020 177.7 : : : : : : : : : : : :
我想添加一列Av。 TR。用于计算平均TR我在上面提到了公式,我希望将它按SYMBOL分组。
因此,新列ATR将如下所示:-
ATR row1 NAN row2 NAN row3 NAN row4 NAN row5 NAN row6 NAN row7 NAN row8 NAN row9 NAN row10 (Average of first 10 rows of TR) row11 (Refer FORMULA above) row12 (Refer FORMULA above) (so on) (so on)
必须按符号分组
答案 0 :(得分:1)
您应该能够在每个组上应用滚动变换。这样的事情应该可以实现。
df['Av.TR'] = df.groupby('SYMBOL')['TR'].transform(lambda x: x.rolling(10, 1).mean())
如果您希望前10行留空,则
df['Av.TR'] = df.groupby('SYMBOL')['TR'].transform(lambda x: x.rolling(10).mean())
如果您要这样,我不确定。但结合以上内容,然后使用上一行的值应用公式即可。
df['Av.TR'] = df.groupby('SYMBOL')['TR'].transform(lambda x: x.rolling(10).mean())
df['Av.TR'] = np.where(df.shift(1)['Av.TR'].isna(), np.NaN,
(df.shift(1)['Av.TR'] * 9 + df['TR']) / 10)
也许有更好的方法!