熊猫数据透视表:通过aggfunc计算加权平均值

联合警察

我有一个关于教育和收入的大熊猫数据框,基本上看起来像这样。

import pandas as pd
import numpy as np

data = {
    'education': ['Low', 'High', 'High', 'Medium', 'Low', 'Low', 'High', 'Low', 'Medium', 'Medium'],
    'income': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'weights': [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
}
    
df = pd.DataFrame(data, columns=['education', 'income', 'weights'])

print(df)
  education  income  weights
0       Low       1       11
1      High       2       12
2      High       3       13
3    Medium       4       14
4       Low       5       15
5       Low       6       16
6      High       7       17
7       Low       8       18
8    Medium       9       19
9    Medium      10       20

我创建了一个数据透视表,用于计算每种教育类别的平均收入,如下所示:

pivot_educ_inc = pd.pivot_table(df, 
                                values='income',
                                index='education',
                                aggfunc=np.mean)

print(pivot_educ_inc)
             income
education          
High       4.000000
Low        5.000000
Medium     7.666667

我真正想要的是使用“我的权重”列来获得每个教育水平的加权收入方式。但是我找不到定义可以分配给aggfunc的加权均值函数的方法,并且可以做到这一点。

对于我来说,简单地创建一个加权数据集真的不方便(可能吗?),因为权重加起来超过1亿。另外,理想情况下,我想使用aggfunc参数,因为我的数据集中有更多列,例如教育,我想计算加权平均值,其中一些具有25个以上类别。

我可能完全忽略了这里的某些内容,但是我很困惑。

拉鲁巴斯托

我是的忠实拥护者pivot_table,因此在这里提供了使用它的解决方案:

pivot = df.pivot_table(values='income',
                       index='education',
                       aggfunc=lambda rows: np.average(rows, weights=df.loc[rows.index, 'weights']))

结果数据帧将如下所示:

             income
education          
High       4.333333
Low        5.433333
Medium     8.056604

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章