gpt4 book ai didi

python - Pandas - 在满足特定条件的情况下聚合分组数据

转载 作者:太空宇宙 更新时间:2023-11-04 06:35:58 27 4
gpt4 key购买 nike

我想创建一个股票投资组合估值的时间序列,方法是汇总该投资组合所持个别股票的时间序列估值数据。我遇到的问题是,在某些日期可能没有对给定股票的估值,因此在该日期汇总会产生错误的结果。

我想出的解决方案是排除给定 Assets 不存在估值(实际上是价格)数据的日期,然后在我拥有完整数据的这些日期进行汇总。我使用的程序如下:

# 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 中有没有一种有效的方法来做到这一点?我想避免必须遍历数据。

最佳答案

似乎 resample 和/或 fillna 的某种组合会让你得到你正在寻找的东西(意识到这有点晚了!)。

像您正在做的那样获取您的数据。您会以一些差距取回这些东西。看看这个:

import pandas as pd
import numpy as np

dates = pd.DatetimeIndex(start='2012-01-01', periods=10, freq='2D')
df = pd.DataFrame(np.random.randn(20).reshape(10,2),index=dates)

因此,现在您拥有的数据中存在很多差距 — 但您希望获得每日分辨率数据。

只是做:

df.resample('1D')

这将在您缺少数据的地方用一堆 NaN 填充您的数据框。然后当你对它们进行聚合时,只需使用忽略 NaN 的函数(例如 np.nansum、np.mean)!

对于您获得的数据的确切格式仍然有点不清楚。希望对您有所帮助。

关于python - Pandas - 在满足特定条件的情况下聚合分组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11131647/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com