You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 17:17:50