python - 基于过去 12 个月跟踪数据的总和值
问题描述
我有一个样本数据,其中包含超过一年的数据。根据数据,我必须总结过去 12 个月的值。在过去的 12 个月中,行数不是固定的,可以是 12、9、4 等。此外,应该从每个类别的第一个日期开始计算 12 个月及以后(这里是 RIC)列 A。
样本数据:
所以我们必须按 RIC 进行分组,这里是其中的两个,并将从该组出现的第一个日期起 12 个月前调整的值相加,因此对于 TECL.P 类别,总和应该是从 2020 年 12 月 22 日到2020 年 3 月 24 日 - 不应包括上一年的同一个月。同样,对于 CSML,它应该是从 2020 年 12 月 30 日到 2020 年 3 月 25 日。
这是我的第一篇文章,所以如果有什么需要请告诉我。
Adding data as text :
RIC DIVIDENDEXDATE Adjusted
==============================================
TECL.P 12/22/2020 0
TECL.P 9/22/2020 0
TECL.P 6/23/2020 0
TECL.P 3/24/2020 0.019
TECL.P 12/23/2019 0.111
TECL.P 9/24/2019 0.007
CSML.OQ 12/30/2020 0.146
CSML.OQ 9/24/2020 0.069
CSML.OQ 6/24/2020 0.62
CSML.OQ 3/25/2020 0.018
CSML.OQ 12/30/2019 0.0657
CSML.OQ 9/24/2019 0.6585
解决方案
您可以尝试将数据转换为时间序列并rolling
在长度为 365 天 ( '365D'
) 的窗口上使用:
df['DIVIDENDEXDATE'] = pd.to_datetime(df['DIVIDENDEXDATE']) + pd.offsets.BMonthEnd() # ensures that same month a year earlier will not be considered in sum, but assumes your data has a monthly frequency!
df.set_index(['RIC', 'DIVIDENDEXDATE'], inplace=True)
df.sort_index(level=['RIC', 'DIVIDENDEXDATE'], inplace=True)
df.groupby(level='RIC').apply(lambda grp: grp.reset_index(level='RIC', drop=True).rolling('365D').sum())
推荐阅读
- vue.js - 有没有办法防止索引块被构建过程更新?
- c++ - 如何在while循环中使用条件变量进行互斥锁?
- python - Django-postgres-extesion ArrayRemove
- javascript - 如何在 Vue.js 中将删除请求延迟 1 秒
- spring - 如何根据服务器告诉spring boot要加载哪些属性文件?
- mysql - MYSQL 如何在特定索引页中找到键?
- c# - 尽管具有正确的 using 指令,但对象中的某些方法不可用
- terraform - 特定文件更改的触发管道
- c# - WPF中RegisterHotKey函数下如何触发键盘释放事件?
- javascript - Javascript - Alert() 添加按钮以关闭