【问题标题】:Groupby mean ignoring zeroGroupby 均值忽略零
【发布时间】:2020-12-10 23:08:19
【问题描述】:

我有一个具有这种结构的数据透视表:

        correl
        stock_b      AAAA    CCCC    DDDD
stock_a date            
AAAA    2018-01-02   0.00    0.00    0.00
        2018-01-10   0.00    0.00    0.00
        2018-01-15   0.00   69.45   69.14
        2018-01-31   0.00    0.00    0.00
BBBB    2018-01-02   0.00   43.29   67.38
        2018-01-14   0.00    0.00    0.00
        2018-01-15  50.16   42.74   67.47
        2018-01-31   0.00   42.74   67.47

我想按stock_a 分组并取平均值,忽略零。它看起来像:

         correl
stock_b  AAAA    CCCC    DDDD
stock_a         
AAAA     0.00   69.45   69.14
BBBB    50.16   42.92   67.44

df.groupby('stock_a').mean() 考虑到 0 和值不是我想要的。

【问题讨论】:

    标签: python python-3.x dataframe group-by


    【解决方案1】:

    您可以使用agg 为您的组使用“自定义”聚合函数。这可以是一个 lambda 函数,但为了可读性,我更喜欢这样的适当函数:

    def mean_excluding_zero(l):
        nonzero = [elem for elem in l if elem != 0]
        return sum(nonzero) / len(nonzero)
    
    df.groupby('stock_a').agg(mean_excluding_zero)
    

    【讨论】:

      【解决方案2】:

      只需groupby 和mean:

      print (df[df.ne(0)].groupby("stock_a").mean().fillna(0))
         
                AAAA       CCCC   DDDD
      stock_a                         
      AAAA      0.00  69.450000  69.14
      BBBB     50.16  42.923333  67.44
      

      【讨论】:

        猜你喜欢
        • 2019-03-30
        • 1970-01-01
        • 2015-03-05
        • 1970-01-01
        • 2020-05-19
        • 1970-01-01
        • 2015-10-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多