提问人:S.V 提问时间:7/3/2019 更新时间:7/3/2019 访问量:705
熊猫组按滚动平均值/中位数与缺失值删除
pandas groupby rolling mean/median with dropping missing values
问:
如何通过下降缺失值的滚动平均值/中位数进入熊猫组?即,在计算平均值/中位数之前,输出应该删除缺失值,而不是在存在缺失值时给我 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))
(两者都提出了例外,但也许存在一些类似的东西)
谢谢你的帮助!
答:
5赞
cs95
7/3/2019
#1
你在找 ?注意不需要,直接调用:min_periods
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
评论
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 没有注意到这一点,但修复了;)
评论