滚动窗口的中位数,不包括零

时间:2017-11-16 04:46:51

标签: python pandas median

当我试图找到以下系列的滚动中位数时,我得到一个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列表。

我在做错了什么? 谢谢!

2 个答案:

答案 0 :(得分:3)

由于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

答案 1 :(得分:2)

看起来像是熊猫中的一个错误。

试试这个:

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