我试图使用roll
来查找前6天值的平均值。以下代码不会忽略NaN
。
import pandas as pd
import numpy as np
import datetime
xx =pd.DataFrame(list(zip([datetime.datetime.fromtimestamp(x*60*60*24*2) for x in range(0,16,2)],[2,1,3,np.nan, 4,5,6,7])), columns=["datetime", "val"])
xx.set_index("datetime", inplace=True)
xx.rolling(str(6)+'d',1).apply(lambda x : np.nanmean(x))
上面的代码给出了:
val
datetime
1969-12-31 18:00:00 2.0
1970-01-04 18:00:00 1.5
1970-01-08 18:00:00 2.0
1970-01-12 18:00:00 NaN
1970-01-16 18:00:00 4.0
1970-01-20 18:00:00 4.5
1970-01-24 18:00:00 5.5
1970-01-28 18:00:00 6.5
但是,如果删除datetime系列索引,
xx = pd.DataFrame([2,1,3,np.nan, 4,5,6,7],
columns=["val"])
yy = xx.rolling(3,1).apply(lambda x : np.nanmean(x))
忽略NaN
:
val
0 2.0
1 1.5
2 2.0
3 2.0
4 3.5
5 4.5
6 5.0
7 6.0
非常感谢任何帮助!
这是一个错误,并在此修复: https://github.com/pandas-dev/pandas/pull/17156
答案 0 :(得分:0)
插入数据框可能更好,或者你也可以使用fillna()来回填或向前填充。
试试这段代码:
xx.interpolate(inplace=True)
yy = xx.rolling(str(6)+'d',1,).apply(lambda x : np.nanmean(x))
经过测试及其工作
答案 1 :(得分:0)
这被确认为一个错误并在此修复 https://github.com/pandas-dev/pandas/pull/17156