鱼C论坛

 找回密码
 立即注册
查看: 2805|回复: 3

求助,时间序列数据计算的问题

[复制链接]
发表于 2023-1-15 20:32:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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']

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-1-15 22:16:13 | 显示全部楼层
有大佬能解答一下吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-15 22:31:14 From FishC Mobile | 显示全部楼层
是用rolling,只是你不太会用而已。
如果躺在被窝里的我没记错的话,rolling方法可以针对“时间序列类型”的数据进行处理,参数写法支持  如'7d',代表“近7天”,典型如求七天移动平均 rolling('7d', ...).mean()
而像你那样直接写数字的,是代表“近365行的数据”,而非你以为的“近一年”(问题是 你的数据总共可能都没365多行吧?)

所以,你可以再查查相关资料和例子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-22 21:37:50 | 显示全部楼层
阿奇_o 发表于 2023-1-15 22:31
是用rolling,只是你不太会用而已。
如果躺在被窝里的我没记错的话,rolling方法可以针对“时间序列类型” ...

后来试过7D等写法了,还是报错,目前已上stackoverflow询问后通过其它方法解决,感谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 08:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表