添加一个根据其与其他两列的匹配方式进行计算的列

时间:2018-07-26 22:25:16

标签: python pandas calculated-columns

我想比较两列,然后根据比较结果计算值的加权平均值。

在这里,我们看到代码相同,而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

1 个答案:

答案 0 :(得分:0)

我不确定您如何仅使用一个值来获取类别的值(例如,为什么第一行的Value_new设置为0.3,为什么最后两行是1.51.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