【问题标题】:median of a rolling window, excluding zeros滚动窗口的中位数,不包括零
【发布时间】:2017-11-16 04:46:50
【问题描述】:

当我尝试找到以下系列的滚动中位数时,我得到了一个 NaN 列表。

我用过:

b = a[a!=0].rolling(100).median()

a = 实际数据系列(数据框)。里面有一堆零,我想在找到中位数时排除这些零

b = 滚动中位数

a[a!=0] 给了我以下系列。

2017-10-05 NaN 2017-10-06 -0.001074 2017-10-09 -0.001804 2017-10-10 NaN 2017-10-11 NaN 2017-10-12 -0.001687 2017-10-13 NaN 2017-10-16 NaN 2017-10-17 NaN 2017-10-18 NaN 2017-10-19 NaN 2017-10-20 NaN 2017-10-23 -0.003972 2017-10-24 NaN 2017-10-25 -0.004663 2017-10-26 NaN 2017-10-27 NaN 2017-10-30 -0.003192 2017-10-31 NaN 2017-11-01 NaN 2017-11-02 NaN 2017-11-03 NaN t2017-11-06 NaN 2017-11-07 -0.000189 2017-11-08 NaN 2017-11-09 -0.003762 2017-11-10 -0.000898 2017-11-13 NaN 2017-11-14 -0.002310

输出只是一个 NaN 列表。

我做错了什么? 谢谢!

【问题讨论】:

  • 那么a 的开头是什么?什么版本的熊猫?
  • a 是一个中间有很多零的数字列表。这是一个数据框。
  • 我使用的是 0.20.3

标签: python pandas median


【解决方案1】:

由于 a 是 Dataframe 而不是 Series,如果您尝试进行索引,您将获得 NaN。

考虑这个系列

s = pd.Series(np.random.randint(0,10, 20), index = pd.date_range(start = '01/01/2017', periods = 20))

如果你切片它,零会被丢弃

s[s!=0]

但对于数据框,相同的代码将引入 NaN。

df = pd.DataFrame(np.random.randint(0,10, 20), index = pd.date_range(start = '01/01/2017', periods = 20))

您可以通过在索引时指定列名来处理此问题

df[df[0] != 0] #df[0] being the column

【讨论】:

  • @piRSquared 但是,DataFrame.median 默认情况下会忽略 nan,并且由于滚动窗口仅代表 super 作为中位数,因此默认情况下它也应该忽略 nan。如果您尝试显式传递 kwarg skipna=True,它会在 C 代码中的某处崩溃。我仍然称这是一个错误,或者至少是一个糟糕的惊喜......
  • @wim 好吧,这是一个令人讨厌的惊喜。我现在正在检查。然而,根据 OP,np.nan 出人意料地出现了。这篇文章解释了原因。如果 OP 用布尔系列过滤,他们就不会得到np.nan,它应该可以工作。也就是说,我正在检查你的建议,因为这听起来很糟糕!
  • @piRSquared,我错过了昨晚的所有活动,恭喜获得 100K!
【解决方案2】:

似乎是熊猫中的一个错误。

试试这个:

a[a!=0].rolling(window=100, center=False, min_periods=1).median()

【讨论】:

  • 这非常接近。对我来说已经足够好了!但结果与 excel 给我的结果略有不同。
  • 不是错误。 @Vaishali 在她的帖子中解释了这一点。
  • 我收回了我所说的一些内容。我同意@wim 的观点,这里有一个错误,不能跳过np.nan。我可以用a[a != 0].rolling(100).apply(np.nanmedian) 确认结果。不过,Vaishali 的帖子还是值得一看的。
猜你喜欢
  • 1970-01-01
  • 2022-12-18
  • 2013-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
  • 1970-01-01
相关资源
最近更新 更多