У меня есть 2 фрейма данных с другим индексом Datetime, поэтому разной длины в строках, но одинаковой длины в столбцах:
- Ежемесячный фрейм данных, df1. Представляет веса.
- Дневной фрейм данных, df2. Представляет возвраты.
Я хочу умножить значение января 1985 года от df1 на все значения февраля 1985 года от df2 и т. Д. До конца кадра данных (то есть января 2020 года) для каждого колонка. Моя идея состоит в том, что это приводит к «взвешенным доходам», основанным на весах предыдущего периода.
Я пытаюсь выполнить это sh, используя a для l oop при сопоставлении годовых и месячных индексов, но это приводит к значениям nan.
for date in df1.index.tolist():
df2.loc[(df2.index.year == date.year) & (df2.index.month == date.month)] *= df1
Я пробовал разные операторы if. Я также пытался создать фрейм данных с ежедневным индексом, заполненным весами, равной длины в строках и столбцах индекса возврата. Сделав это, я мог бы использовать .mul (), поскольку кадры данных имели бы одинаковую длину.
Однако мне не удалось найти решение и надеяться, что кто-то из вас сможет мне помочь.
Ниже я написал пример того, как выглядят два кадра данных и как должен выглядеть мой желаемый результат. Я надеюсь, что кто-то может помочь мне с этим вопросом. Заранее спасибо!
df1
DatetimeIndex a b
1985-01-31 00:00:00 0.1 0.4
1985-02-28 00:00:00 0.4 0.5
..........
2019-12-31 00:00:00 0.5 0.6
df2
DatetimeIndex a b
1985-02-01 00:00:00 1.0 3.0
1985-02-04 00:00:00 2.0 4.0
1985-03-01 00:00:00 3.0 2.0
1985-03-02 00:00:00 4.0 1.0
.........
2020-01-01 00:00:00 8.0 6.0
2020-01-25 00:00:00 4.0 2.0
Resulting df
DatetimeIndex a b
1985-02-01 00:00:00 0.1 1.2
1985-02-04 00:00:00 0.2 1.6
1985-03-01 00:00:00 1.2 1.0
1985-03-02 00:00:00 1.6 0.5
...........
2020-01-01 00:00:00 4.0 3.6
2020-01-25 00:00:00 2.0 1.2