【问题标题】:calculate mean only when the number of values in each rows is higher then certain number in python pandas仅当每行中的值的数量高于 python pandas 中的某个数字时才计算平均值
【发布时间】:2018-09-17 16:33:39
【问题描述】:

我有一个包含九列的每日时间序列数据框。每列代表来自不同方法的测量。我只想在有两个以上的测量值时才计算每日平均值,否则要分配为 NaN。如何使用熊猫数据框做到这一点?

假设我的 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

我期望的平均值如下:

             0    
2000-02-25  NaN   
2000-02-26  0.48  
2000-02-27  0.11  
2000-02-28  NaN   
2000-02-29  0.57  

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    where 用于NaNs 值,由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
    

    【讨论】:

    • 感谢@jezrael 的帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多