如何在Pandas DataFrame中按两列分组计算交互占比?
嘿,我来帮你搞定这个proportion列的计算!你已经完成了前期的数据处理,现在只需要简单几步就能得到符合要求的占比结果,下面给你两种实用的实现方式:
实现思路
核心逻辑是:先计算每个USER2对应的所有numberOfInteractions总和,再将每行的numberOfInteractions除以这个总和,得到该行的占比。
方法一:用groupby + transform(最简洁高效)
transform方法可以直接在原DataFrame上生成分组统计结果,不用额外的合并操作,非常方便:
# 给每行添加对应USER2的总交互数 user_record_access['total_user2_interactions'] = user_record_access.groupby('USER2')['numberOfInteractions'].transform('sum') # 计算proportion列 user_record_access['proportion'] = user_record_access['numberOfInteractions'] / user_record_access['total_user2_interactions']
方法二:用groupby + merge(逻辑更直观)
如果你想更清晰地看到分组求和与合并的过程,可以用这种方式:
# 第一步:单独计算每个USER2的总交互数 user2_total = user_record_access.groupby('USER2')['numberOfInteractions'].sum().reset_index(name='total_user2_interactions') # 第二步:把总交互数合并回原数据集 user_record_access = user_record_access.merge(user2_total, on='USER2', how='left') # 第三步:计算占比 user_record_access['proportion'] = user_record_access['numberOfInteractions'] / user_record_access['total_user2_interactions']
验证你的示例
以你提到的us1 us2行为例:
- 该行的
numberOfInteractions是1+2+3=6 USER2=us2的所有记录总和是6 + (1+1+11)=19- 计算得
proportion=6/19≈0.315789,完全符合你的预期!
内容的提问来源于stack exchange,提问作者Catarina Nogueira
相关产品推荐
相关产品推荐

