pandas groupby 滚动均值/中值删除缺失值
Posted
技术标签:
【中文标题】pandas groupby 滚动均值/中值删除缺失值【英文标题】:pandas groupby rolling mean/median with dropping missing values 【发布时间】:2019-11-14 06:24:13 【问题描述】:如何通过滚动均值/中值加入 Pandas 分组并删除缺失值? IE。如果存在缺失值,输出应该在计算平均值/中位数之前删除缺失值,而不是给我 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))
(两者都引发异常,但可能存在一些类似的东西)
感谢您的帮助!
【问题讨论】:
***.com/questions/15771472/…,添加 min_periods 【参考方案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
【讨论】:
感觉stack的服务器今天出问题了,不能及时看到问题:-( @WeNYoBen 是的。顺便说一句,只是看到你的评论。这是骗子吗?我觉得它很接近,但这里的 min period 的用例略有不同。 我不认为那是 dup ,因为他有两个问题,忘记添加 min_periods 并且滚动不应该与 apply @cs95 我使用 apply 因为有一个 bug in pandas,它只会在 pandas-0.25 中修复。如果不使用 apply (两个“日期”索引级别),看看你的输出有多混乱。 @S.V 没注意到,但已修复;)以上是关于pandas groupby 滚动均值/中值删除缺失值的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用groupby函数计算dataframe数据中每个分组的滚动统计值(rolling statistics)的语法:例如分组的N天滚动平均值滚动中位数滚动最大最小值滚动加和等