我想比较两列,然后根据比较结果计算值的加权平均值。
在这里,我们看到代码相同,而ID却有所不同,但是重复。我希望Value_new是一列显示Value的加权倍数。例如,ID = 1重复4次。因此,第一行的Value_new将为0.5/(0.5+0.5+0.7+1) = 0.185
拥有:
Code ID Value
66099 1 0.3
55933 1 0.5
55933 2 0.4
55933 1 0.5
55933 1 0.7
55933 1 1
55933 2 2
55933 2 0.8
55933 3 3
55933 4 6
55933 5 7
想要(第一行= 0.5/(0.5+0.5+0.7+1) = 0.185
:
Code ID Value Value_new
66099 1 0.3 0.3
55933 1 0.5 0.185185185
55933 2 0.4 0.125
55933 1 0.5 0.185185185
55933 1 0.7 0.259259259
55933 1 1 0.37037037
55933 2 2 0.625
55933 2 0.8 0.25
55933 3 3 1
55933 4 6 1.5
55933 5 7 1.4
答案 0 :(得分:0)
我不确定您如何仅使用一个值来获取类别的值(例如,为什么第一行的Value_new
设置为0.3
,为什么最后两行是1.5
和1.4
?),但是IIUC根据您对所需输出的描述,可以使用transform
:
df['Value_new'] = df.groupby(['Code','ID'])['Value'].transform(lambda x: x/x.sum())
>>> df
Code ID Value Value_new
0 66099 1 0.3 1.000000
1 55933 1 0.5 0.185185
2 55933 2 0.4 0.125000
3 55933 1 0.5 0.185185
4 55933 1 0.7 0.259259
5 55933 1 1.0 0.370370
6 55933 2 2.0 0.625000
7 55933 2 0.8 0.250000
8 55933 3 3.0 1.000000
9 55933 4 6.0 1.000000
10 55933 5 7.0 1.000000