这里是中级/初级Python用户。我需要弄清楚如何根据我解析成数据帧的一些股票市场数据来计算年度权重和加权平均值。
我有一些2003-2018年的股票市值和日期,它是这样给出的(比这段代码显示的值多得多):
ticker date marketcap open high low close
A 2003-03-31 8466487038.0 13.38 13.47 13.0 13.15
A 2003-06-30 11273789220.5 19.5 19.76 19.46 19.55
AA 2017-03-31 6031414196.0 34.06 34.74 33.6 34.4
AA 2017-06-30 6426297428.0 33.16 33.45 32.535 32.65
ICE 2016-03-31 29363680289.5 46.396 47.184 46.242 47.028
ICE 2016-06-30 31796255816.0 50.602 51.349 50.321 51.192
我只是想为每个股票行情的市值计算一个年度权重。
即:
Weight(YEAR) = AVGTickerMarketCap(YEAR) / AllTickersMarketCap(YEAR)
由于市值每年都有多个值,因此我需要取2003、2004年的平均第一个市值,每个股票代码的2005...etc -因此是AVGTickerMarketCap(年份)。
我只知道如何计算AllTickersMarketCap(YEAR):
df1['date'] = pd.to_datetime(df1.date)
avg_all = df1.groupby(df1.date.dt.year['marketcap'].transform('mean')
但这似乎只是第一个报价器"A“,并且将"A”的相同含义应用于每年,而不管它们的报价器是什么。
问题出在哪里?我该如何去寻找AVGTickerMarketCap(年份)?
发布于 2018-06-07 07:57:26
获取包含年平均值的列的正确语法为
avg_all = df1['marketcap'].groupby(df1.date.dt.year).transform('mean')
同样,要获得每年的平均值和报价器,您可以运行以下命令:
avg_all = df1['marketcap'].groupby([df1.date.dt.year,df1.ticker]).transform('mean')
如果您不希望它是一个可以映射回数据框架的列,而只是想要一个新的数据框架,那么您可以用.mean()
替换.transform('mean')
。
在您的示例数据中,每个滚动条都有一个唯一的年份,该年对于该滚动条的所有值都是相同的,而与所有其他滚动条值不同,因此按年分组和按年分组和滚动条是等价的操作。
https://stackoverflow.com/questions/50731006
复制相似问题