我有一个关于教育和收入的 pandas 数据框,基本上如下所示。
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
关于python - pandas 数据透视表 : calculate weighted averages through aggfunc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65616374/