熊猫:汇总行值以创建新的数据集

时间:2019-12-20 23:48:35

标签: python-3.x pandas aggregate

我有以下熊猫数据框:

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    

我当前的方法是遍历熊猫数据框,为每个用户收集数据并从中创建一个新的数据集。但是,我想知道是否有一种优雅的方法来解决此问题?非常感谢!

1 个答案:

答案 0 :(得分:2)

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