熊猫组按滚动平均值/中位数与缺失值删除

pandas groupby rolling mean/median with dropping missing values

提问人:S.V 提问时间:7/3/2019 更新时间:7/3/2019 访问量:705

问:

如何通过下降缺失值的滚动平均值/中位数进入熊猫组?即,在计算平均值/中位数之前,输出应该删除缺失值,而不是在存在缺失值时给我 NaN。

import pandas as pd
t = pd.DataFrame(data={v.date:[0,0,0,0,1,1,1,1,2,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.set_index([v.date,'i0','i1'], inplace=True)
t.sort_index(inplace=True)

print(t)
print(t.groupby('date').apply(lambda x: x.rolling(window=2).mean()))

               x
date i0 i1      
0    0  A   10.0
     1  A   20.0
     2  A   30.0
     3  A    NaN
1    0  A    NaN
     1  A   21.0
     2  A    NaN
     3  A   41.0
2    0  A    NaN
     1  A    NaN
     2  A   32.0
     3  A   42.0

               x
date i0 i1      
0    0  A    NaN
     1  A   15.0
     2  A   25.0
     3  A    NaN
1    0  A    NaN
     1  A    NaN
     2  A    NaN
     3  A    NaN
2    0  A    NaN
     1  A    NaN
     2  A    NaN
     3  A   37.0

而我想要以下内容用于此示例:

               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

我试过了什么

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

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

(两者都提出了例外,但也许存在一些类似的东西)

谢谢你的帮助!

Python pandas 数据帧 pandas-group作者: rolling-computation

评论

1赞 BENY 7/3/2019
stackoverflow.com/questions/15771472/...,添加min_periods

答:

5赞 cs95 7/3/2019 #1

你在找 ?注意不需要,直接调用:min_periodsapplyGroupBy.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

评论

1赞 BENY 7/3/2019
我觉得堆栈的服务器今天正在行动,无法及时看到问题:-(
0赞 cs95 7/3/2019
@WeNYoBen是的,一样。顺便说一句,只是你的评论。这是骗子吗?我觉得它很接近,但最小周期的用例在这里略有不同。
0赞 BENY 7/3/2019
我不认为这是dup,因为他有两个问题,忘记添加min_periods和滚动不应该与应用
0赞 S.V 7/3/2019
@cs95 我使用 apply,因为 pandas 中有一个错误,只会在 pandas-0.25 中修复。看看如果不使用apply(两个“日期”索引级别),您的输出会有多混乱。
0赞 cs95 7/3/2019
@S.V 没有注意到这一点,但修复了;)