首页 > 解决方案 > 基于过去 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

标签: pythonpandas

解决方案


您可以尝试将数据转换为时间序列并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())

推荐阅读