我有一个名为dF的数据框:
Twa_mean
Date_Time
2007-01-01 07:00:00 6.5
2007-01-01 07:10:00 6.4
2007-01-01 07:20:00 6.4
2007-01-01 07:30:00 NaN
2007-01-01 07:40:00 NaN
2007-01-01 07:50:00 NaN
我试图获得滚动均值(window = 2),但是没有考虑NaN,所以,我使用了scipy.stats的nanmean函数:
import scipy.stats as st
f=lambda x: st.nanmean(x)
d=pd.rolling_apply(dF,2,f)
但是,我得到了这个:
Twa_mean
Date_Time
2007-01-01 07:00:00 NaN
2007-01-01 07:10:00 6.45
2007-01-01 07:20:00 6.40
2007-01-01 07:30:00 NaN
2007-01-01 07:40:00 NaN
2007-01-01 07:50:00 NaN
就像st.nanmean没有忽视NaN,发生了什么?
我希望如此:
Twa_mean
Date_Time
2007-01-01 07:00:00 NaN
2007-01-01 07:10:00 6.45
2007-01-01 07:20:00 6.40
2007-01-01 07:30:00 6.40
2007-01-01 07:40:00 NaN
2007-01-01 07:50:00 NaN
答案 0 :(得分:0)
我认为大熊猫滚动意味着将涵盖你给出的案例。您只需要将minimum_periods
参数指定为rolling_mean
In [53]: df
Out[53]:
1
0
2007-01-01 07:00:00 6.5
2007-01-01 07:10:00 6.4
2007-01-01 07:20:00 6.4
2007-01-01 07:30:00 NaN
2007-01-01 07:40:00 NaN
2007-01-01 07:50:00 NaN
In [54]: pd.rolling_mean(df, 2, min_periods=1)
Out[54]:
1
0
2007-01-01 07:00:00 6.50
2007-01-01 07:10:00 6.45
2007-01-01 07:20:00 6.40
2007-01-01 07:30:00 6.40
2007-01-01 07:40:00 NaN
2007-01-01 07:50:00 NaN
这不是你想要的,但我会说它更加一致。你期望第一个NaN
,大概是因为你只有1次观察。但对于后者,你将平均值设置为等于单个观察值(由于NaNs)。如果你真的想要这个,你可以通过并设置第一个n
观察(在这种情况下为n=1
)等于NaN
之后(res = pd.rolling_mean(df, 2, min_periods=1); res.iloc[:n] = np.nan
)。