我有一个数据框:
import pandas as pd
import numpy as np
d1 = {'id': [11, 11,11,11,11,24,24,24,24,24,24],
'PT': [3, 3,6,0,9,4,2,3,4,5,0],
"date":["2010-10-10","2010-10-12","2010-10-16","2010-10-18","2010-10-22","2010-10-10","2010-10-11","2010-10-14","2010-10-16","2010-10-19","2010-10-22"],
}
df1 = pd.DataFrame(data=d1)
id PT date
0 11 3 2010-10-10
1 11 3 2010-10-12
2 11 6 2010-10-16
3 11 0 2010-10-18
4 11 9 2010-10-22
5 24 4 2010-10-10
6 24 2 2010-10-11
7 24 3 2010-10-14
8 24 4 2010-10-16
9 24 5 2010-10-19
10 24 0 2010-10-22
我希望计算每个 id
的列 PT
在最后3个条目上移动窗口下的滚动均值。 此外,如果该 id
的条目数尚不足3个,则应获取最后2个或当前条目的平均值。 结果应如下所示:
id PT date Rolling mean last 3
0 11 3 2010-10-10 3
1 11 3 2010-10-12 3
2 11 6 2010-10-16 4
3 11 0 2010-10-18 3
4 11 9 2010-10-22 5
5 24 4 2010-10-10 4
6 24 2 2010-10-11 3
7 24 3 2010-10-14 3
8 24 4 2010-10-16 3
9 24 5 2010-10-19 4
10 24 0 2010-10-22 3
我尝试并获得:
df1["rolling"]=df1.groupby('id')['PT'].rolling(3).mean().reset_index(0,drop=True)
id PT date rolling
0 11 3 2010-10-10 NaN
1 11 3 2010-10-12 NaN
2 11 6 2010-10-16 4.0
3 11 0 2010-10-18 3.0
4 11 9 2010-10-22 5.0
5 24 4 2010-10-10 NaN
6 24 2 2010-10-11 NaN
7 24 3 2010-10-14 3.0
8 24 4 2010-10-16 3.0
9 24 5 2010-10-19 4.0
10 24 0 2010-10-22 3.0
因此,我的问题在于当没有三个条目时,我得到的不是前两个或当前条目的内容,而是 NaN(非数字)。
df1.groupby(['id','date']
,但出错了:插入列的不兼容索引与框架索引...所以,我搜索了这个错误,并发现要添加df1.groupby(by = ['id','date'], as_index=False)
,但结果并不是我想要的 - Jagr