Python 通过滚动平均值/中间值进行分组,并删除缺失值

Python 通过滚动平均值/中间值进行分组,并删除缺失值,python,pandas,dataframe,pandas-groupby,rolling-computation,Python,Pandas,Dataframe,Pandas Groupby,Rolling Computation,如何通过滚动平均值/中间值来删除缺失值?即,如果存在缺失值,则在计算平均值/中值之前,输出应删除缺失值,而不是给我NaN 将熊猫作为pd导入 t=pd.DataFrame(data={v.date:[0,0,0,1,1,1,1,2,2,2], “i0”:[0,1,2,3,0,1,2,3,0,1,2,3], “i1”:[A']*12, ‘x’:[10,20,30,np.nan,np.nan,21,np.nan,41,np.nan,np.nan,32,42.] t、 设置索引([v.date,'i0

如何通过滚动平均值/中间值来删除缺失值?即,如果存在缺失值,则在计算平均值/中值之前,输出应删除缺失值,而不是给我NaN

将熊猫作为pd导入
t=pd.DataFrame(data={v.date:[0,0,0,1,1,1,1,2,2,2],
“i0”:[0,1,2,3,0,1,2,3,0,1,2,3],
“i1”:[A']*12,
‘x’:[10,20,30,np.nan,np.nan,21,np.nan,41,np.nan,np.nan,32,42.]
t、 设置索引([v.date,'i0','i1',inplace=True)
t、 排序索引(就地=真)
打印(t)
打印(t.groupby('date').apply(lambda x:x.rolling(window=2.mean()))
给予

x
日期i0 i1
0 0 A 10.0
1A 20.0
2 A 30.0
3阿南
10阿南
1A 21.0
2阿南
3 A 41.0
20阿南
1阿南
2 A 32.0
3 A 42.0
x
日期i0 i1
阿南
1A 15.0
2 A 25.0
3阿南
10阿南
1阿南
2阿南
3阿南
20阿南
1阿南
2阿南
3 A 37.0
虽然我希望此示例具有以下内容:

x
日期i0 i1
0 0 A 10.0
1A 15.0
2 A 25.0
3 A 30.0
10阿南
1A 21.0
2 A 21.0
3 A 41.0
20阿南
1阿南
2 A 32.0
3 A 37.0
我试过的

t.groupby('date').apply(lambda x:x.rolling(window=2.dropna().median())

t.groupby('date')。应用(lambda x:x.rolling(窗口=2)。中值(dropna=True))
(两者都提出了例外,但可能存在类似的情况)


谢谢你的帮助

您正在寻找
最小周期
?请注意,您不需要
apply
,直接调用
GroupBy.Rolling

t.groupby('date', group_keys=False).rolling(window=2, min_periods=1).mean()
               x
date i0 i1      
0    0  A   10.0
     1  A   15.0
     2  A   25.0
     3  A   30.0
1    0  A    NaN
     1  A   21.0
     2  A   21.0
     3  A   41.0
2    0  A    NaN
     1  A    NaN
     2  A   32.0
     3  A   37.0

,添加min_Period我感觉stack的服务器今天出现故障,无法及时看到问题:-(@WeNYoBen Yeah same.顺便说一句,这是一个重复吗?我觉得很接近,但这里的min periods用例略有不同。我不认为这是dup,因为他有两个问题,忘了添加min_periods,也不应该使用滚动apply@cs95我使用apply,因为有一个,它将只在pandas-0.2中固定5.如果不使用apply(两个“日期”索引级别),看看你的输出有多混乱。@S.V没有注意到这一点,但已修复;)