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

Pandas groupby,求和并填充原始数据帧

  •  0
  • user1700890  · 技术社区  · 6 年前

    import pandas as pd
    df_1 = pd.DataFrame({'color': ['blue', 'blue', 'yellow', 'yellow'], 'count': [1,3,4,5]})
    
    color   count   
    blue    1   
    blue    3   
    yellow  4   
    yellow  5   
    

    我想按颜色列和总和列分组,然后用结果填充原始数据帧。所以最终结果应该是这样的:

    df_2 = pd.DataFrame({'color': ['blue', 'blue', 'yellow', 'yellow'], 'count': [1,3,4,5], 
                         'total_per_color': [4,4,9,9]})
    
    
    color   count   total_per_color
    blue    1       4
    blue    3       4
    yellow  4       9
    yellow  5       9
    

    我可以使用groupby和sum,然后使用pandas进行合并,但我想知道是否有更快的方法?在SQL中,可以使用 partition dplyr mutate

    1 回复  |  直到 6 年前
        1
  •  4
  •   BENY    6 年前

    使用 transform 具有 groupby

    df_1['total_per_color']=df_1.groupby('color')['count'].transform('sum')
    df_1
    Out[886]: 
        color  count  total_per_color
    0    blue      1                4
    1    blue      3                4
    2  yellow      4                9
    3  yellow      5                9