繁体   English   中英

如何为两列中的每个唯一值计算 Python 中的加权平均值?

[英]How to calculate a weighted average in Python for each unique value in two columns?

下图显示了我在 Python 中的几行打印列表。 我想得到:一个行政区的唯一值列表,一个相应的年份唯一值列表,以及一个“平均值”的加权平均值列表,其中“nobs”作为权重,但对于每个行政区和每年(变量“ type”表示在一个自治市镇的特定年份中是否只有一种、两种或三种类型)。

我知道如何使用整个列表获得加权平均值:

weighted_avg = np.average(average, weights=nobs)

但我不知道如何为每个独特的自治市镇年度计算一个。

在此处输入图像描述

我是 Python 的新手,如果你知道怎么做,请帮忙。

假设“类型”列不影响您的计算,您可以使用groupby获得平均值。 这是数据:

df = pd.DataFrame({'borough': ['b1', 'b2']*6, 'year': [2008, 2009, 2010, 2011]*3,
          'average': np.random.randint(low=100, high=200, size=12), 
          'nobs': np.random.randint(low=1, high=40, size=12)})
print(df):
   borough  year  average  nobs
0       b1  2008      166     1
1       b2  2009      177    35
2       b1  2010      114    27
3       b2  2011      187    18
4       b1  2008      193     2
5       b2  2009      105    27
6       b1  2010      114    36
7       b2  2011      144     3
8       b1  2008      114    39
9       b2  2009      157     6
10      b1  2010      133    17
11      b2  2011      176    12

我们添加一个新列,它是 average 和 nobs 列的乘积:

df['average x nobs'] = df['average']*df['nobs']
newdf = pd.DataFrame({'weighted average': df.groupby(['borough', 'year']).sum()['average x nobs']/df.groupby(['borough', 'year']).sum()['nobs']})
print(newdf):
              weighted average
borough year                  
b1      2008        119.000000
        2010        118.037500
b2      2009        146.647059
        2011        179.090909

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM