当数据不足时,使用str滚动的大熊猫不会导致NaN

时间:2018-07-20 20:22:31

标签: pandas

假设我们有每周的数据,

$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是否存在。

1 个答案:

答案 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