如何在值的其他实例之间平均一个值的第一个实例?

时间:2018-11-07 18:06:59

标签: python pandas

我有一个像这样的数据框:

ID          Instance         Value
-------------------------------------
52349          1              10
13523          1              15 
13523          2              20
13523          3              30
12356          1              10
12356          2              15
22355          1              23

我需要让ID的第一实例的值平均到第一,第二和第三实例,并且ID的第二实例的值要平均到第二和第三实例。我正在寻找的最终结果如下:

ID          Instance         Value
-------------------------------------
52349          1              10
13523          1               5 
13523          2              15
13523          3              45
12356          1               5
12356          2              20
22355          1              23 

如果您查看ID号13523,则应按以下方式细分该值:

15 5
20 5 10
30 5 10

添加加粗的值会给出我正在寻找的值

1 个答案:

答案 0 :(得分:0)

让我们尝试一下:

df['newValue'] = df.groupby('ID')['Value']\
                   .transform(lambda x: (x / (x.notnull().cumsum()[::-1].values)).cumsum())

输出:

      ID  Instance  Value  newValue
0  52349         1     10        10
1  13523         1     15         5
2  13523         2     20        15
3  13523         3     30        45
4  12356         1     10         5
5  12356         2     15        20
6  22355         1     23        23

详细信息:

在每个groupby的ID组中,使用transform创建一个新值。

首先使用notnullcumsum来创建连续的值计数,然后使用[::-1](可逆元素)进行倒计数,将X除以来转换值x倒数并使用cumsum来计算平均值的连续总数。