Python 考虑到每个计数,重新计算平均值
如果数据帧如下所示Python 考虑到每个计数,重新计算平均值,python,pandas,dataframe,group-by,Python,Pandas,Dataframe,Group By,如果数据帧如下所示 index yearmon college major gpa num 0 20140401 1 a 3.36 29 1 20180401 2 b 2.63 48 2 20160401 3 c 3.23 55 3 20170401 4 d 4.22 1 4 20140401 3 b
index yearmon college major gpa num
0 20140401 1 a 3.36 29
1 20180401 2 b 2.63 48
2 20160401 3 c 3.23 55
3 20170401 4 d 4.22 1
4 20140401 3 b 3.72 72
它给出了每一年,每一所大学,每一个专业的平均绩点
我想做一个新的数据集作为平均gpa只考虑专业
例如,对于主b,在不同的时间有2个数据
所以我必须做一个新的
gpa平均值考虑到num(学生人数)
我尝试过groupby函数,但它只会进行平均,因为它们具有相同的num计数(不考虑num变量)
有办法解决这个问题吗?一种懒惰的方法,因为学生的数量是整数
(df.loc[df.index.repeat(df['num']), ['major', 'gpa']]
.groupby('major').mean()
)
选项2
groupby().apply()
和np.平均值
:
(df.groupby('major')
.apply(lambda x: np.average(x['gpa'], weights=x['num']))
)
选项3最复杂但性能最好的是分配总分,并手动计算平均值:
df['total'] = df['gpa'] * df['num']
groups = df.groupby('major')
out = groups['total'].sum()/groups['num'].sum()
输出:
gpa
major
a 3.360
b 3.284
c 3.230
d 4.220