代码之家  ›  专栏  ›  技术社区  ›  thomas.mac

pandas groupby使用字典值,应用sum

  •  3
  • thomas.mac  · 技术社区  · 6 年前

    我有一个默认命令:

    dd = defaultdict(list,
            {'Tech': ['AAPL','GOOGL'],
             'Disc': ['AMZN', 'NKE']  }
    

    一个数据帧,如下所示:

             AAPL AMZN GOOGL NKE
    1/1/10   100  200  500   200
    1/2/10   100  200  500   200
    1/310    100  200  500   200
    

    我想要的输出是根据字典的值对数据帧求和,键作为列:

             TECH DISC 
    1/1/10   600  400 
    1/2/10   600  400  
    1/3/10   600  400 
    

    pandas groupby文档说,如果你通过一个字典,它就会这样做,但我最终得到的是一个空的df,使用以下代码:

    df.groupby(by=dd).sum()   ##returns empty df
    
    2 回复  |  直到 6 年前
        1
  •  4
  •   jpp    6 年前

    创建 dict 以正确的方式,你可以使用 by 具有 axis=1

    # map each company to industry
    dd_rev = {w: k for k, v in dd.items() for w in v}
    # {'AAPL': 'Tech', 'GOOGL': 'Tech', 'AMZN': 'Disc', 'NKE': 'Disc'}
    
    # group along columns
    df.groupby(by=dd_rev,axis=1).sum() 
    
    Out[160]: 
            Disc  Tech
    1/1/10   400   600
    1/2/10   400   600
    1/310    400   600
    
        2
  •  1
  •   Haleemur Ali    6 年前

    可以使用Debug字典和1行字典理解创建一个新的数据文件

    pd.DataFrame({x: df[dd[x]].sum(axis=1) for x in dd})
    # output:
    
            Disc  Tech
    1/1/10   400   600
    1/2/10   400   600
    1/310    400   600