我有一个数据框,其中有一个观察号,一个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
答案 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