我最近得到了我的ETF时间周期回报的解决方案-感谢Laurent -解决方案链接:https://stackoverflow.com/a/76136825/1332019
遗漏的是为SecurityID添加截至“起息日”的“市场价值”。
我还没有弄清楚如何将“市场价值”添加到迭代中。
以下是df_data时间序列数据源:一个账号有多个基金,有些是独立账户。
这是我想要的SUMMARY输出:
这是Laurent提供的解决方案,我们只需要市值和日期与正确的帐号关联。
下面是到目前为止工作正常的代码,只需要添加Market Value和Date以及正确的AccountNumber关联。再次感谢我对这段代码的任何帮助。
import pandas as pd
import numpy as np
#As of Date:
VME = '3/31/2023'
results = pd.DataFrame()
for etf in df_data["SecurityID"].unique():
# 3 Month Return
df_3m = df_data.loc[
(df_data["SecurityID"] == etf)
& (df_data["Date"] >= pd.to_datetime(VME) - pd.DateOffset(months=2))
& (df_data["Date"] <= VME)
]
df_3mror = (np.prod(df_3m["Return"] / 100 + 1) - 1) * 100
# 1 Year Return
df_1yr = df_data.loc[
(df_data["SecurityID"] == etf)
& (df_data["Date"] >= pd.to_datetime(VME) - pd.DateOffset(months=11))
& (df_data["Date"] <= VME)
]
df_1ror = (np.prod(df_1yr["Return"] / 100 + 1) - 1) * 100
# 3 Year Return
df_3yr = df_data.loc[
(df_data["SecurityID"] == etf)
& (df_data["Date"] >= pd.to_datetime(VME) - pd.DateOffset(months=35))
& (df_data["Date"] <= VME)
]
df_3ror = (np.prod(df_3yr["Return"] / 100 + 1) ** (12 / 36) - 1) * 100
results = pd.concat(
[
results,
pd.DataFrame(
{
"AccountNumber": [85150],
"AssetID": [etf],
"3 Months": [df_3mror],
"1 YR ROR": [df_1ror],
"3 YRS ROR": [df_3ror],
}
),
]
)
print(results)
1条答案
按热度按时间nmpmafwu1#
在当前的代码中,可以像这样将
market value
添加到最终的 Dataframe 中:在for-loop之后和外部添加:
然后: