【发布时间】:2019-08-29 21:28:45
【问题描述】:
我有以下数据框 df。我想计算按每个日期和部门级别分组的加权平均值
date Equity value Sector Weight
2000-01-31 TLRA 20 RG Index 0.20
2000-02-28 TLRA 30 RG Index 0.20
2000-03-31 TLRA 40 RG Index 0.20
2000-01-31 RA 50 RG Index 0.30
2000-02-28 RA 60 RG Index 0.30
2000-03-31 RA 70 RG Index 0.30
2000-01-31 AAPL 80 SA Index 0.50
2000-02-28 AAPL 90 SA Index 0.50
2000-03-31 AAPL 100 SA Index 0.50
2000-01-31 SPL 110 SA Index 0.60
2000-02-28 SPL 120 SA Index 0.60
2000-03-31 SPL 130 SA Index 0.60
Sector 下可以有多个 Equity。我想要基于权重列的部门级别加权平均值。
预期输出:
date RG Index SA Index
2000-01-31 19 106
2000-02-28 24 117
2000-03-31 29 138
我尝试了下面的代码,但没有得到预期的输出。请帮忙
g = df.groupby('Sector')
df['wa'] = df.value / g.value.transform("sum") * df.Weight
df.pivot(index='Sector', values='wa')
【问题讨论】:
-
每组中您的体重总和
!= 1。所以不太确定你的输出真的是平均值。您是否想将它们重新归一化以求和为 1,这是np.average之类的默认行为