代码之家  ›  专栏  ›  技术社区  ›  Lynn

对多个列进行分组,同时在多个列中执行多个聚合

  •  0
  • Lynn  · 技术社区  · 4 年前

    我想按多个列分组,并执行几个不同的聚合。按类型和日期分组,取en、en2、stat1和stat2的平均值。

    数据

    type    en  en2 date       stat1    stat2
    aa      40  80  1/1/2021    1       1
    aa      20  20  1/1/2021    2       1  
    aa      10  10  1/1/2021    3       5  
    bb      10  10  1/1/2021    3       9
    bb      50  5   1/1/2021    5       1
    aa      90  5   1/7/2021    5       2
    aa      100 10  1/7/2021    1       5
    bb      80  10  1/7/2021    5       2
                        
    

    渴望的

    type    en  en2 date       stat1    stat2
    aa      23  36  1/1/2021    2       3
    bb      30  7.5 1/1/2021    4       5
    aa      95  7.5 1/7/2021    3       3.5
    bb      80  10  1/7/2021    5       2
    

    grouped = final.groupby(['date'],['type']) \
    .agg({'en':'mean', 'en2':'mean','stat1':'mean','stat2':'mean'})
    

    我有打字错误。-坏名单 我在研究。 任何建议都将不胜感激。

    0 回复  |  直到 4 年前
        1
  •  1
  •   Corralien    4 年前

    尝试:

    grouped = final.groupby(['date', 'type'], as_index=False) \
                   .agg({'type': 'first', 'en': 'mean', 'en2': 'mean',
                         'date': 'first', 'stat1': 'mean', 'stat2': 'mean'})
    print(grouped)
    
    # Output
      type         en        en2      date  stat1     stat2
    0   aa  23.333333  36.666667  1/1/2021    2.0  2.333333
    1   bb  30.000000   7.500000  1/1/2021    4.0  5.000000
    2   aa  95.000000   7.500000  1/7/2021    3.0  3.500000
    3   bb  80.000000  10.000000  1/7/2021    5.0  2.000000
    
        2
  •  1
  •   Script Developer    4 年前
    grouped = final[['date', 'type', 'en',
                   'en2','stat1','stat2']].groupby(['date', 'type'],
                    as_index=False, dropna=False).sum()