如何用Pandas按条件关联数据,评估谷歌广告的销售转化效果?
用Pandas实现广告销售归因分析的解决方案
前提说明
先统一列名(避免空格带来的操作麻烦):
- Promotion:
TrackID,click_datetime - Website:
TrackID,access_datetime,client_account - Sales:
client_account,sale,sale_datetime
第一步:为每个销售匹配最近的网站访问记录
你的SQL逻辑存在小问题:max(Website.TrackID)无法正确对应最近访问的TrackID,正确思路是先找到每个销售对应的最晚访问时间,再匹配对应的TrackID。用Pandas实现如下:
- 关联Sales和Website,筛选出销售发生前的网站访问记录:
import pandas as pd # 合并两个DataFrame,保留销售时间之前的访问记录 sales_with_visits = pd.merge( Sales, Website, on='client_account', how='left' ).query('access_datetime < sale_datetime')
- 为每个销售(按
client_account和sale_datetime分组)提取最近的访问记录:
# 按销售维度分组,取每组中访问时间最晚的记录 latest_visits = sales_with_visits.sort_values('access_datetime', ascending=False)\ .groupby(['client_account', 'sale_datetime'])\ .first()\ .reset_index() # 提取核心字段:销售信息、对应TrackID、最近访问时间 sales_with_latest_track = latest_visits[['client_account', 'sale', 'sale_datetime', 'TrackID', 'access_datetime']]
第二步:关联广告数据,判断销售是否来自广告
将第一步的结果与Promotion关联,筛选出广告点击早于销售的记录,最终得到带销售转化的广告列表:
# 关联广告数据和第一步的归因结果 ad_sales_attribution = pd.merge( Promotion, sales_with_latest_track, on='TrackID', how='left' ).query('click_datetime < sale_datetime') # 整理最终输出:广告TrackID、对应的销售记录及时间信息 final_result = ad_sales_attribution[['TrackID', 'sale', 'sale_datetime', 'click_datetime']]
补充提示
- 若Sales中的
sale无唯一标识,用client_account + sale_datetime分组可确保每个销售对应一条最近访问记录 - 确保所有时间列都是Pandas的
datetime64类型,若不是可通过pd.to_datetime()转换,避免时间比较出错 - 若TrackID存在重复(理论上应唯一对应广告点击),可根据业务需求调整分组或去重逻辑
内容的提问来源于stack exchange,提问作者FábioRB
相关产品推荐
相关产品推荐

