假设我们有每周的数据,
$pd_tmp
SCF/CME_C SCF/CME_S SCF/CME_SM
Date
2018-06-19 0.797769 0.955308 0.609879
2018-06-26 0.858320 1.066278 0.641302
2018-07-03 0.872486 1.086672 0.656232
2018-07-10 0.908582 1.054378 0.664331
如果我对窗口数应用滚动均值,如果数据不足,我可以得到nan
$pd_tmp.rolling(2).mean()
SCF/CME_C SCF/CME_S SCF/CME_SM
Date
2018-06-19 NaN NaN NaN
2018-06-26 0.828044 1.010793 0.625590
2018-07-03 0.865403 1.076475 0.648767
2018-07-10 0.890534 1.070525 0.660282
但是,如果我将str用作滚动窗口,则行为会有所不同
$print pd_tmp.rolling("8D").mean()
SCF/CME_C SCF/CME_S SCF/CME_SM
Date
2018-06-19 0.797769 0.955308 0.609879
2018-06-26 0.828044 1.010793 0.625590
2018-07-03 0.865403 1.076475 0.648767
2018-07-10 0.890534 1.070525 0.660282
当数据不足时,如何确定nan是否存在。
答案 0 :(得分:2)
您可以在agg函数中添加一个计数,然后消除所有没有“足够”计数的结果记录。
df_out = df.rolling("8D").agg(['mean','count'])
df_out.columns = df_out.columns.map('_'.join)
df_out.where(df_out.iloc[:,2]>1).filter(like='_mean')
输出:
SCF/CME_C_mean SCF/CME_S_mean SCF/CME_SM_mean
Date
2018-06-19 NaN NaN NaN
2018-06-26 0.828045 1.010793 0.625590
2018-07-03 0.865403 1.076475 0.648767
2018-07-10 0.890534 1.070525 0.660281