python - pandas 数据透视表:通过 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 个类别。
我可能完全忽略了这里的某些东西,但我很难过。
解决方案
我会添加一个带有加权和的附加列。然后它将是这样的:
df = pd.DataFrame(data, columns=['education', 'income', 'weights'])
df['weighted'] = df['income'] * df['weights']
pivot_educ_inc = pd.pivot_table(df,
values=['weights', 'weighted'],
index='education',
aggfunc=np.sum)
pivot_educ_inc['weighted_avg'] = pivot_educ_inc['weighted'] / pivot_educ_inc['weights']
推荐阅读
- email - 使用 Sieve 将日期标题添加到传入的电子邮件
- c# - 比较数组而不使用 linq
- javascript - 我想根据文本值更改表格循环中文本的颜色
- azure - 从传递给 Azure 数据工厂 v2 管道的运行时参数生成和存储 JSON 文件?
- java - Java将Mysql查询结果放入multimap
- python - 在python中实现我自己的算法来缩放和旋转图像
- angular6 - 如何在 Highlight.js 中表达双引号
- javascript - wampy subscribe 没有收到已发布的消息
- html - 在这种情况下,字体粗细属性不起作用
- html - 沿圆形剪辑路径元素的SVG弯曲文本未显示