年加权平均数

2024-09-27 19:20:36 发布

您现在位置:Python中文网/ 问答频道 /正文

中级/初级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年等每个股票行情的市值的平均值-因此是AVGTickerMarketCap(年份)。你知道吗

我只知道如何计算AllTickerMarketCap(年份):

df1['date'] = pd.to_datetime(df1.date)
avg_all = df1.groupby(df1.date.dt.year['marketcap'].transform('mean')

但这似乎只取第一个“A”,并将“A”的相同平均值应用于每年,而不考虑其股票代码。你知道吗

问题出在哪里?我该如何找到AVGTickerMarketCap(年份)?你知道吗


Tags: 数据用户dateyearaa平均值权重df1
1条回答
网友
1楼 · 发布于 2024-09-27 19:20:36

获取包含年平均值的列的正确语法如下

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')。你知道吗

在您的示例数据中,每个ticker都有一个唯一的年份,该年份对于该ticker的所有值都是相同的,并且不同于所有其他ticker值,因此按年份分组和按年份分组以及ticker是等效的操作。你知道吗

相关问题 更多 >

    热门问题