在数据框中创建滚动聚合值 Pandas

Creating rolling aggregate values in data frames Pandas

我目前正在处理财务数据,但卡在了分析的最后一步。这些年来,我有一个包含许多不同公司及其 returns 的大型面板数据,并且未对同一公司多年来的值进行排序。类似于这样的东西:

        year     ticker     return_y
0       1985      VLID       -0.5838
1       1985        KO        0.3245
2       1994       CTL       -0.3063
3       1996      DRYR       -0.1607
..       ...       ...           ...
1356    2002      CHUX       -0.2456
1357    1987       HRL       -0.0233
1358    2015        KO        0.2343
..       ...       ...           ...
56798   2017      AFMXF       0.0558
56799   2014        TER       0.0134

我一直试图做的是创建一个单独的数据框,它在 3 年的滚动基础上对每家公司的 returns 求和,如果缺少一年(例如,我们有 1999 年和2001 但不是 2000) 从下一点重新开始滚动。因此像这样:

        3_years      ticker     return_y
0       1985-1987      VLID      -0.0245
1       1986-1988      VLID       0.0366
2       1987-1989      VLID      -0.0421
3       1993-1995      VLID      -0.1607
..       ...            ...          ...
12569   2008-2010     AFMXF       0.2349
12570   2012-2015     AFMXF       0.1112

提前致谢!

假设您的数据框名为 df

简而言之:

你会做这样的事情:

# ts stands for time on y-axis and security on x-axys
returns_ts = df.pivot(index='year', columns='ticker', values='return_y')
rolling_returns_ts = returns_ts.rolling(3).sum()

这将为您提供另一种格式的滚动 returns(我觉得使用起来更容易)。

要将它们恢复为您描述的格式,您可以:

old_format_rolling_returns = rolling_returns_ts.stack().reset_index()

请注意,这假设 years 轴需要是 datetime 格式。 另请注意,对于您想要的转换,您需要再次将 years 格式更改为您喜欢的格式。