【问题标题】:Group by mean for element with value >0对值 > 0 的元素按均值分组
【发布时间】:2021-05-27 18:54:12
【问题描述】:
df=pd.DataFrame({"x":[1,2,3,0],"y":[1,1,1,1]})
df.groupby("y").agg(x_sum=("x",np.mean))

此代码给出 x 的平均值,输出为 1.5 ((1+2+3+0)/4=1.5) 但我想要大于 0 的 x 的平均值,所以输出应该是(1+2+3)/3=2。 我该如何解决?

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    将x 列中的0 等不大于NaN 替换为NaN:

    df.x = df.x.where(df.x.gt(0))
    #alternative
    #df.x = df.x.mask(df.x.le(0))
    print (df)
         x  y
    0  1.0  1
    1  2.0  1
    2  3.0  1
    3  NaN  1
    
    df1 = df.groupby("y").agg(x_sum=("x",np.mean))
    print (df1)
       x_sum
    y       
    1    2.0
    

    【讨论】:

      【解决方案2】:

      您可以编写和使用您的自定义函数。示例:

      
      import pandas as pd
      import numpy as np
      
      def mean_without_zero_values(values):
          vals = [v for v in values if v > 0]
          return np.mean(vals)
      
      df=pd.DataFrame({"x":[1,2,3,0],"y":[1,1,1,1]})
      result = df.groupby("y").agg(x_sum=("x",mean_without_zero_values))
      
      print(result)
      # output
      #    x_sum
      # y
      # 1      2
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-25
        • 1970-01-01
        • 1970-01-01
        • 2015-06-16
        • 2012-10-12
        • 1970-01-01
        • 1970-01-01
        • 2013-12-29
        相关资源
        最近更新 更多