大熊猫数据框的年加权平均值

时间:2018-06-06 23:27:51

标签: python pandas date dataframe statistics

中级/初级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(年份)。

我只能弄清楚如何计算AllTickersMarketCap(YEAR):

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

但这似乎只是采用第一个股票代码“A”并且每年对“A”应用相同的均值而不管它们的股票代码。

问题出在哪里,我将如何寻找AVGTickerMarketCap(YEAR)?

1 个答案:

答案 0 :(得分:1)

获取包含年度平均值的列的正确语法是

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

与获得每年的平均值和自动收报机类似:

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

如果您不希望它成为可以映射回数据框的列,而只是希望每年/自动收录器的值都有一个新的数据框,则可以.transform('mean')加上.mean() }}

在您的示例数据中,每个股票代码具有唯一年份,该年份对于该股票代码的所有值都是相同的,并且与所有其他股票代码值不同,因此按年份分组并按年份和股票代码分组是等效操作。