|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 idleriver 于 2023-1-15 20:34 编辑
大家好,我是刚开始学习python的新手。目前手上有这样一堆基金产品的净值数据,产品数量大概几百只,共三列,第一列是基金代码,第二列是数据日期,第三列是该产品当日的净值数据,大概如下表。由于每个产品成立的时间不一样,所以有的产品的成立时间长数据就多,有的产品成立时间段,数据就少,而且每个产品的净值披露周期也不一样,有的每周公布一次净值,比如下表的AAAAAA产品,有的每天公布一次净值,比如BBBBBB产品。
产品代码 | 日期 | adj_nav | AAAAAA | 2019/12/16 | 1.0001 | AAAAAA | 2019/12/23 | 1.0007 | AAAAAA | 2019/12/30 | 1.0014 | AAAAAA | 2020/1/6 | 1.0022 | AAAAAA | 2020/1/13 | 1.0026 | AAAAAA | 2020/1/20 | 1.0035 | AAAAAA | 2020/2/3 | 1.0054 | AAAAAA | 2020/2/10 | 1.0061 | AAAAAA | 2020/2/17 | 1.0071 | AAAAAA | 2020/2/24 | 1.0079 | | …… | | AAAAAA | 2022/12/12 | 1.0897 | AAAAAA | 2022/12/19 | 1.0897 | AAAAAA | 2022/12/26 | 1.0897 | AAAAAA | 2023/1/3 | 1.0897 | AAAAAA | 2023/1/9 | 1.0897 | BBBBBB | 2020/1/8 | 1.0014 | BBBBBB | 2020/1/15 | 1.002 | BBBBBB | 2020/1/21 | 1.0027 | BBBBBB | 2020/1/22 | 1.0029 | BBBBBB | 2020/1/23 | 1.0029 | BBBBBB | 2020/2/3 | 1.0049 | BBBBBB | 2020/2/4 | 1.005 | BBBBBB | 2020/2/5 | 1.005 | | …… | | BBBBBB | 2022/10/25 | 1.0916 | BBBBBB | 2022/10/26 | 1.0916 | BBBBBB | 2022/10/27 | 1.0917 | BBBBBB | 2022/10/28 | 1.0918 | BBBBBB | 2022/10/31 | 1.092 |
我想算产品的回撤情况(产品当前净值较近一段期间的最高净值的下跌幅度,计算公式=当前净值/近期最大净值-1),并且通过下列式子算出了产品成立以来的动态回撤,(动态即每天都求一下成立那天到当前日期期间的最大净值,再计算回撤,从而得到一个回撤的时间序列)。并且计算成功了。
df['pre_max']=df.groupby(['产品代码'])['adj_nav'].cummax()
df['动态回撤']=(df['adj_nav']-chrems['pre_max'])/chrems['pre_max']
但是,现在我想求一下产品近1年的最大回撤,即每天都计算一下当前那天到1年前这段区间内的最大净值,然后再跟现在的净值比较,求一个下跌幅度。我以为要用rolling去算,写了以下式子,结果系统报错了。请问这种情况该怎么写呢?
chrems['近1年最高净值']=chrems.groupby(['理财代码'])['adj_nav'].rolling(365, min_periods=1).max()
chrems['动态回撤(近1年)']=(chrems['adj_nav']-chrems['pre_max_1yr'])/chrems['pre_max_1yr']
|
|