【问题标题】:pandas groupby rolling mean/median with dropping missing valuespandas groupby 滚动均值/中值删除缺失值
【发布时间】: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))

(两者都引发异常,但可能存在一些类似的东西)

感谢您的帮助!

【问题讨论】:

标签: python pandas dataframe pandas-groupby rolling-computation


【解决方案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 没注意到,但已修复;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-21
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 2019-06-16
相关资源
最近更新 更多