我想通过汇总该投资组合中单个股票持有量的时间序列估值数据来创建股票投资组合估值的时间序列。我遇到的问题是,在某些日期可能没有对给定股票持有量的估值,因此在该日期汇总会产生错误的结果。
我想出的解决方案是排除给定持股不存在估值(实际价格)数据的日期,然后在我拥有完整数据的这些日期汇总。我使用的程序如下:
# Get the individual holding valuation data
valuation = get_valuation(portfolio = portfolio, df = True)
# Then next few lines retrieve the dates for which I have complete price data for the
# assets that comprise this portflio
# First get a list of the assets that this portfolio contains (or has contained).
unique_assets = valuation['asset'].unique().tolist()
# Then I get the price data for these assets
ats = get_ats(assets = unique_assets, df = True )[['data_date','close_price']]
# I mark those dates for which I have a 'close_price' for each asset:
ats = ats.groupby('data_date')['close_price'].agg({'data_complete':lambda x: len(x) == len(unique_assets)} ).reset_index()
# And extract the corresponding valid dates.
valid_dates = ats['data_date'][ats['data_complete']]
# Filter the valuation data for those dates for which I have complete data:
valuation = valuation[valuation['data_date'].apply(lambda x: x in valid_dates.values)]
# Group by date, and sum the individual hodling valuations by date, to get the Portfolio valuation
portfolio_valuation = valuation[['data_date','valuation']].groupby('data_date').agg(lambda df: sum(df['valuation'])).reset_index()
我的问题有两个:
1) 上面的方法感觉很复杂,我相信 Pandas 有更好的方法来实现我的解决方案。有什么建议么?
2)我使用的方法并不理想。最好的方法是,对于我们没有估值数据的那些日期(对于给定的持股),我们应该使用该持股的最新估值。因此,假设我正在计算 2012 年 6 月 21 日的投资组合估值,并且在该日期有 GOOG 的估值数据,但只有 2012 年 6 月 20 日的 APPL 估值数据。那么 2012 年 6 月 21 日投资组合的估值应该仍然是总和这两个估值。在 Pandas 中是否有有效的方法来做到这一点?我想避免遍历数据。