仅当每行中的值的数量高于python pandas中的特定数量时才计算平均值

bik*_*ser 2 python dataframe pandas

我有一个包含九列的每日时间序列数据帧.每列代表不同方法的测量值.我想仅在有两个以上的测量值时计算每日平均值,否则想要指定为NaN.如何用pandas dataframe做到这一点?

假设我的df看起来像:

             0    1      2    3     4     5    6      7     8
2000-02-25  NaN   0.22  0.54  NaN   NaN  NaN   NaN   NaN    NaN
2000-02-26  0.57  NaN   0.91  0.21  NaN  0.22  NaN   0.51   NaN
2000-02-27  0.10  0.14  0.09  NaN   0.17 NaN   0.05  NaN    NaN
2000-02-28  NaN   NaN   NaN  NaN    NaN  NaN   NaN   NaN    0.14
2000-02-29  0.82  NaN   0.75  NaN   NaN  NaN   0.14  NaN    NaN
Run Code Online (Sandbox Code Playgroud)

我期待的平均价值如下:

             0    
2000-02-25  NaN   
2000-02-26  0.48  
2000-02-27  0.11  
2000-02-28  NaN   
2000-02-29  0.57  
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 6

使用whereNaN由创造条件S值DataFrame.count的数量与排除NaNS和通过比较Series.gt(>):

s = df.where(df.count(axis=1).gt(2)).mean(axis=1)
#alternative soluton with changed order
#s = df.mean(axis=1).where(df.count(axis=1).gt(2))
print (s)
2000-02-25      NaN
2000-02-26    0.484
2000-02-27    0.110
2000-02-28      NaN
2000-02-29    0.570
dtype: float64
Run Code Online (Sandbox Code Playgroud)