У меня есть 2 разных фрейма данных (Weights = CTPortfolioWeight, Returns = DRXCTVar), оба с разным индексом Datetime (ежемесячный и дневной), но одинаковой длины в столбцах (в столбцах 27 разных валют).
Я хочу добиться следующего:
- Умножить вес февраля 1985 года для столбца 1 на значения, полученные в марте 1985 года для столбца 1
- Умножить вес марта 1985 года для столбца 1 с возвращениями за апрель 1985 года для столбца 1
- ....
- Умножьте вес декабря 2019 года для столбца 27 на Возвращения января 2020 года для столбца 27
Это должно привести к взвешенным ежедневным доходам на столбец.
Решение 1 Я пытался сделать это путем сопоставления значений различных фреймов данных на основе их индекса месяца и года, но при этом не удалось вообще.
Этот код дает мне фрейм данных DRXCTVar со значениями NaN
for date in CTPortfolioWeight.index.tolist():
DRXCTVar.loc[(DRXCTVar.index.year == date.year) & (DRXCTVar.index.month == date.month)] *= CTPortfolioWeight.shift()
Решение 2 Я также попытался создать новый фрейм данных с ежедневным индексом из DRXCTVar, состоящий из всех весов, основанных на кадре данных CTPortfolioWeight (поскольку я обычно использую умножения фреймов данных с равным DatetimeIndex). Была заполнена только дата, которая присутствовала в месяце в качестве ежедневного информационного кадра (который является последним днем открытых торгов), тогда как другие дни приводили к значению NaN. Я добавил картинку, чтобы прояснить ее.
for date in CTPortfolioWeight.index.tolist():
DRXCTVar.loc[(DRXCTVar.index.year == date.year) & (DRXCTVar.index.month == date.month)] = CTPortfolioWeight.shift()
Я действительно новичок в Python, но в целом справляюсь с этим. Тем не менее, я слишком долго застрял с этим относительно простым вычислением.
Я надеюсь, что найдется кто-то, кто сможет мне помочь. Если что-то неясно, пожалуйста, спросите, и я попытаюсь прояснить это более подробно.
Заранее спасибо, Уолли.
Данные весов и возвратов
Результирующее решение для кадра данных 2