如何在Pandas中基于另一DataFrame添加用户各类型占比列?
问题描述
现有两个DataFrame:
df1:
user_id 0 101 1 102 2 103 3 101
df2:
user_id type 0 101 cash 1 101 card 2 102 card 3 102 card 4 103 cash 5 103 cash 6 103 card
需要为df1添加列,展示每个user_id对应各type的占比,最终输出格式如下:
user_id cash_pct card_pct 0 101 0.5 0.5 1 102 0 1.0 2 103 0.67 0.33 3 101 0.5 0.5
已知需要用到groupby,但不清楚后续操作步骤。
解决方案
可以通过分组统计-透视转置-占比计算-合并关联的流程实现,代码如下:
步骤1:计算各user_id的type占比
# 按user_id和type分组统计数量,转置为宽表(缺失type补0) type_counts = df2.groupby(['user_id', 'type']).size().unstack(fill_value=0) # 按行计算各type的占比,保留两位小数 type_pct = type_counts.div(type_counts.sum(axis=1), axis=0).round(2) # 给列名添加_pct后缀,匹配需求格式 type_pct.columns = [f"{col}_pct" for col in type_pct.columns]
步骤2:将占比表合并到df1
# 以user_id为关联键,左连接保留df1所有行 df_final = df1.merge(type_pct, on='user_id', how='left')
这个方法支持任意数量的type类型,会自动生成对应的占比列,完全匹配需求格式。
内容的提问来源于stack exchange,提问作者cogent_warrior
相关产品推荐
相关产品推荐

