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

如何使用pandas计算两个DataFrame匹配类别的浏览量占比

实现方案

直接通过isin结合列去重操作即可完成,全程不需要做表连接,代码简洁高效:

import pandas as pd

# 示例数据集
TableA = pd.DataFrame({'c': ['A', 'A', 'B', 'C', 'C'],
                    'views': [10, 10, 20, 25, 25] })
TableB = pd.DataFrame({'c': ['A', 'A', 'B', 'B']}) 

# 计算占比
target_c = TableB['c'].unique()
a_unique = TableA.drop_duplicates('c', keep='first')
ratio = a_unique[a_unique['c'].isin(target_c)]['views'].sum() / a_unique['views'].sum()

print(ratio) # 输出 0.5454545454545454,即30/55

逻辑说明

  • 仅对TableB的c字段提取唯一值,不需要对整个TableB做全表去重,开销极低
  • 仅对TableA按c字段做一次去重,得到每个类别对应的唯一浏览量
  • 通过isin过滤出属于TableB覆盖的类别,直接求和后除以总去重浏览量得到结果

如果你的TableA中同一类别对应的views一定是相同的,也可以用groupby替代去重操作,写法如下:

a_agg = TableA.groupby('c')['views'].first()
ratio = a_agg[a_agg.index.isin(TableB['c'].unique())].sum() / a_agg.sum()

两种方案都不需要做表连接,性能远高于反连接实现。

内容的提问来源于stack exchange,提问作者vojta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:27:01