【发布时间】:2019-06-02 08:19:19
【问题描述】:
我需要生成一些金融资产回报的加权平均值,其中使用的权重会随时间变化。 (申请是财务问题,但问题本身是一个非常普遍的问题)。
我的回报和权重摘录如下:
returns_df:随着时间的推移资产回报率
weights_df:资产权重随时间变化
例如,第一个表中的收益都将由{0.023; 0.8733; 0.103} 加权,因为它们都落在之后 2015-04-01 但之前 2015-05-01。 p>
当然,我的真实数据集的回报跨越了我体重的整个日期范围。
我完全不知道如何解决这个问题,我想过使用groupby(),但鉴于weights_df 的形状与returns_df 不同,这似乎不起作用。
import numpy as np
import pandas as pd
from io import StringIO
# alternatively try `import StringIO`
returns_datatext = StringIO("""
DateTime │ Asset 1 │ Asset 2 │ Asset 3
2015-04-09 07:00 │ -0.000959 │ -0.000207 │ -0.000233
2015-04-09 08:00 │ -0.004003 │ 0.000169 │ 0.001221
2015-04-09 09:00 │ -0.000700 │ -0.000070 │ -0.000096
2015-04-09 10:00 │ -0.000812 │ -0.000289 │ 0.000177
2015-04-09 11:00 │ -0.000030 │ -0.000168 │ -0.000315
""")
returns_df = pd.read_table(returns_datatext, index_col=[0], parse_dates=True, sep='│')
weights_datatext = StringIO("""
Start of weights │ Asset 1 │ Asset 2 │ Asset 3
2015-03-01 │ 1 │ 0 │ 0
2015-04-01 │ 0.023 │ 0.8733 │ 0.1037
2015-05-01 │ 1 │ 0 │ 0
2015-06-01 │ 0.0477 │ 0.8278 │ 0.1245
""")
weights_df = pd.read_table(weights_datatext, index_col=[0], parse_dates=True, sep='│')
上表的预期结果如下:
┌──────────────────┬──────────────────┐ │ 日期时间 │ 加权平均 │ ├──────────────────┼──────────────────┤ │ 2015-04-09 07:00 │ -0.000227 │ │ 2015-04-09 08:00 │ 0.000182 │ │ 2015-04-09 09:00 │ -0.000087 │ │ 2015-04-09 10:00 │ -0.000253 │ │ 2015-04-09 11:00 │ -0.000180 │ └──────────────────┴──────────────────┘【问题讨论】:
标签: python pandas dataframe time-series weighted-average