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

pandas:聚合行值以创建新数据集

  •  1
  • Edamame  · 技术社区  · 5 年前

    我有以下熊猫数据框:

    user_id   label      avg_price
    --------------------------------
    11         A         217.3
    11         B         312.1
    11         C        1079.8
    14         A         453.1
    14         B         125.4
    

    这是我想要的输出:

       user_id     A_avg_price      B_avg_price     C_avg_price
       ---------------------------------------------------------
        11          217.3            312.1            1079.8 
        14          453.1            125.4            na    
    

    我目前的方法是在pandas数据框上循环,为每个用户收集数据并从中创建一个新的数据集。然而,我想知道是否有一个非常优雅的方法来解决这个问题?谢谢!

    1 回复  |  直到 5 年前
        1
  •  1
  •   Umar.H    5 年前

    IIUC公司,

    new_df = pd.crosstab(df.user_id,df.label,df.avg_price,aggfunc='mean')
    
    new_df.columns = new_df.columns.map(lambda x : f'{x}_avg_price')
    
    print(new_df)
    
    label    A_avg_price  B_avg_price  C_avg_price
    user_id                                       
    11             217.3        312.1       1079.8
    14             453.1        125.4          NaN
    

    要匹配所需的输入,可以重置索引并将列标签重命名为 None

    new_df = pd.crosstab(df.user_id,df.label,df.avg_price,aggfunc='mean')
    new_df.columns = new_df.columns.map(lambda x : f'{x}_avg_price')
    new_df.reset_index(inplace=True)
    new_df.columns.name = None
    print(new_df)
           user_id  A_avg_price  B_avg_price  C_avg_price
    0       11        217.3        312.1       1079.8
    1       14        453.1        125.4          NaN