根据给定的总范围计算平均总范围(单位:秒)?

2024-06-25 05:51:08 发布

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

enter image description here

在这张表中,我需要添加一列Av。TR和我想计算Av。文为Av。TR计算:-

前10天为参考日

所以第10天的Av。TR将是:-

Av。TR=前10天TR和随后几天av的平均值。TR将是

公式:Av。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.用于计算Av。TR我在上面提到了公式,我希望它按符号分组

因此,新列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)

它必须按符号分组


Tags: ofsoon符号nantrabove公式
1条回答
网友
1楼 · 发布于 2024-06-25 05:51:08

您应该能够对每个组应用滚动变换。像这样的东西应该能够实现这一点

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)

也许有更好的方法

相关问题 更多 >