Допустим, ваш фрейм данных называется 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()
Это даст вам скользящий возврат в другом формате (с которым мне легче работать).
Чтобы вернуть их в описанный вами формат, вы можете:
old_format_rolling_returns = rolling_returns_ts.stack().reset_index()
Обратите внимание, что это предполагает, что ось years
должна иметь формат datetime
. Также обратите внимание, что для преобразования, которое вы хотите, вам нужно снова изменить формат years
на тот, который вам нравится.