根据Python中的月份和年份,将不同数据框的值与不同的DatetimeIndex相乘

时间:2020-04-08 12:06:18

标签: python pandas dataframe datetime datetimeindex

我有2个不同的数据框(权重= CTPortfolioWeight,返回数= DRXCTVar),两者的Datetime索引(每月和每天)都不同,但是列的长度相同(列是27种不同的货币)。

我要实现的目标如下:

  • 将1985年2月第一栏的权重乘以1985年3月第一栏的收益
  • 将1985年3月第1列的权重乘以1985年4月第1列的收益率
  • ....
  • 将2019年12月第27列的权重乘以2020年1月的回报率获得27列

这将导致每列的每日加权加权收益。

解决方案1 ​​ 我试图通过根据月和年索引匹配不同数据框的值来做到这一点,但是根本没有成功。

此代码为我提供了具有NaN值的DRXCTVar数据帧

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真的很陌生,但通常都能通过它。但是,这种相对简单的计算方法使我陷入了太久。

我希望有人可以帮助我。如果有不清楚的地方,请询问,我会尝试更清楚地阐述。

预先感谢您,沃利。

Dataframes of Weights and Returns

Resulting Dataframe Solution 2

0 个答案:

没有答案