根据以前的值将列添加到熊猫数据框

时间:2018-07-18 18:59:50

标签: python pandas

我有一个数据框,其中有一个观察号,一个id和一个数字

Obs#   Id    Value
--------------------
1        1   5.643
2        1   7.345
3        2   0.567
4        2   1.456

我想计算一个新列,该列是特定ID先前值的平均值

我正在尝试使用类似这样的方法,但是它只能获取以前的值:

df.groupby('Id')['Value'].apply(lambda x: x.shift(1) ...

我的问题是如何获取由ID过滤的先前值的范围,以便可以计算均值?

因此,基于此示例的新列应为

5.643
6.494
0.567
1.0115

2 个答案:

答案 0 :(得分:8)

您似乎想要expanding,然后是 mean

df.groupby('Id').Value.expanding().mean()

Id
1.0  1    5.6430
     2    6.4940
2.0  3    0.5670
     4    1.0115
Name: Value, dtype: float64

答案 1 :(得分:0)

您也可以这样做:

df = pd.DataFrame({'Obs':[1,2,3,4],'Id':[1,1,2,2],'Value':[5.643,7.345, 0.567,1.456]})

df.groupby('Id')['Value'].apply(lambda x:  x.cumsum()/np.arange(1, len(x)+1))

它的输出为:

5.643
6.494
0.567
1.0115