Python 滚动窗口的中值,不包括零
当我试图找到以下系列的滚动中值时,我得到了一个南的列表 我用过:Python 滚动窗口的中值,不包括零,python,pandas,median,Python,Pandas,Median,当我试图找到以下系列的滚动中值时,我得到了一个南的列表 我用过: b = a[a!=0].rolling(100).median() a=实际数据系列(数据帧)。其中有一堆零,我想在求中值时排除这些零 b=滚动中间带 a[a!=0]给出了以下系列 2017-10-05南 2017-10-06 -0.001074 2017-10-09 -0.001804 2017-10-10南 2017-10-11南 2017-10-12 -0.001687 2017-10-13南 2017-10-16南 20
b = a[a!=0].rolling(100).median()
a=实际数据系列(数据帧)。其中有一堆零,我想在求中值时排除这些零
b=滚动中间带
a[a!=0]给出了以下系列
2017-10-05南
2017-10-06 -0.001074
2017-10-09 -0.001804
2017-10-10南
2017-10-11南
2017-10-12 -0.001687
2017-10-13南
2017-10-16南
2017-10-17南
2017-10-18南
2017-10-19南
2017-10-20南
2017-10-23 -0.003972
2017-10-24南
2017-10-25 -0.004663
2017-10-26南
2017-10-27南
2017-10-30 -0.003192
2017-10-31南
2017-11-01南
2017-11-02南
2017-11-03南
t2017-11-06南
2017-11-07 -0.000189
2017-11-08南
2017-11-09 -0.003762
2017-11-10 -0.000898
2017-11-13南
2017-11-14-0.002310
输出只是一个NAN列表
我做错了什么?
谢谢大家! 似乎是熊猫身上的一只虫子 试试这个:
a[a!=0].rolling(window=100, center=False, min_periods=1).median()
好像是熊猫身上的虫子 试试这个:
a[a!=0].rolling(window=100, center=False, min_periods=1).median()
由于a是数据帧而不是序列,如果您尝试进行索引,您将得到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
由于a是数据帧而不是序列,如果您尝试进行索引,您将得到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
那么,从
a
开始是什么呢?什么版本的熊猫?a是一个数字列表,中间有很多零。这是一个数据帧。我使用0.20.3So,从a
中的什么开始?什么版本的熊猫?a是一个数字列表,中间有很多零。这是一个数据帧,我用的是0.20.3这非常接近。对我来说已经够好了!但是结果和excel给我的略有不同,不是一个bug。在她的帖子里解释了。我收回了一些我说的话。我同意@wim的说法,这里有一个不跳过np.nan
的bug。我可以用a[a!=0].rolling(100).apply(np.nanmedia)
确认结果。然而,瓦伊沙利的帖子仍然值得一看。这非常接近。对我来说已经够好了!但是结果和excel给我的略有不同,不是一个bug。在她的帖子里解释了。我收回了一些我说的话。我同意@wim的说法,这里有一个不跳过np.nan
的bug。我可以用a[a!=0].rolling(100).apply(np.nanmedia)
确认结果。然而,Vaishali的帖子仍然值得一看。@piRSquared然而,DataFrame.median默认情况下忽略nan,并且由于滚动窗口只是将中位数委托给super,因此默认情况下它也应该忽略nan。如果试图显式传递kwargskipna=True
,它会在C代码中的某个地方崩溃。我仍然称之为虫子,或者至少是一个坏的惊喜…@wim嗯,这是一个令人讨厌的惊喜。我正在查。然而,根据OPnp.nan
意外出现。这篇文章解释了原因。如果OP是用布尔级数过滤的,他们就不会得到np.nan
,它应该是有效的。也就是说,我正在检查你的建议,因为这听起来很糟糕@piRSquared,我错过了昨晚所有的动作,祝贺你10万@但是,DataFrame.median
默认情况下忽略nan,并且由于滚动窗口仅将中位数委托给super,因此默认情况下也应忽略nan。如果试图显式传递kwargskipna=True
,它会在C代码中的某个地方崩溃。我仍然称之为虫子,或者至少是一个坏的惊喜…@wim嗯,这是一个令人讨厌的惊喜。我正在查。然而,根据OPnp.nan
意外出现。这篇文章解释了原因。如果OP是用布尔级数过滤的,他们就不会得到np.nan
,它应该是有效的。也就是说,我正在检查你的建议,因为这听起来很糟糕@piRSquared,我错过了昨晚所有的动作,祝贺你10万!