我有一个Pandas DataFrame,其中包含两个数值列和两个权重列。我想生成第三列,该列是这两个数值列加权平均后得到的结果,并按组进行分组。
例如:
df = pd.DataFrame({'category':['a','a','b','b'],
'var1':np.random.randint(0,100,4),
'var2':np.random.randint(0,100,4),
'weights1':np.random.random(4),
'weights2':np.random.random(4)})
df
category var1 var2 weights1 weights2
0 a 84 45 0.955234 0.729862
1 a 49 5 0.225470 0.159662
2 b 77 95 0.957212 0.991960
3 b 27 65 0.491877 0.195680
我希望你能够帮我完成以下事项:
df
category var1 var2 weights1 weights2 average
0 a 84 45 0.955234 0.729862 67.108023
1 a 49 5 0.225470 0.159662 30.759124
2 b 77 95 0.957212 0.991960 86.160443
3 b 27 65 0.491877 0.195680 37.814851
我已经使用算术运算符完成了这个操作,就像这样:。
df['average'] = df.groupby('category', group_keys=False) \
.apply(lambda g: (g.weights1 * g.var1 + g.weights2 * g.var2) / (g.weights1 + g.weights2))
但我希望将其推广到使用numpy.average,这样我可以例如取3列或更多列的加权平均值。
我正在尝试类似于以下内容,但似乎不起作用:
df['average'] = df.groupby('category', group_keys=False) \
.apply(lambda g: np.average([g.var1, g.var2], axis=0, weights=[g.weights1, g.weights2]))
返回
TypeError: incompatible index of inserted column with frame index
有人可以帮我完成这个任务吗?