我有以下熊猫数据框:
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
我当前的方法是遍历熊猫数据框,为每个用户收集数据并从中创建一个新的数据集。但是,我想知道是否有一种优雅的方法来解决此问题?非常感谢!
答案 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