pandas对计算生成的CPA列分组聚合后unstack是否会导致数值偏差
问题核心说明
你当前的计算逻辑确实存在数值偏差的可能,核心原因是单条记录CPA的算术平均值≠分组维度下的整体CPA:
举个简单的例子:假设同一个「时段+星期」分组下有两条原始数据:
- 第一条:收入100,转化2,单条CPA=50
- 第二条:收入200,转化10,单条CPA=20
如果用你当前先算单条CPA再求均值的逻辑,得到的分组CPA是(50+20)/2=35,但该分组真实的整体CPA应为总收入/总转化=(100+200)/(2+10)=25,两者差异很大。
正确的聚合方式
应该先按维度分组,分别对收入、转化字段求和后再计算CPA,示例代码如下:
import pandas as pd df = pd.read_csv('Tme of Day_Report_90 Days_1.csv') # 1. 按维度分组,先聚合收入、转化的总和 grouped_df = df.groupby(['Time','Day of Week']).agg( total_rev = ('Revenue (Adv Currency)', 'sum'), total_conv = ('Total Conversions', 'sum') ) # 2. 计算分组维度下的CPA grouped_df['CPA'] = grouped_df['total_rev'] / grouped_df['total_conv'] # 3. 重塑为交叉表并调整列顺序 new_data = grouped_df['CPA'].unstack() new_data = new_data[['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']]
补充说明
如果你的原始数据中,每一行已经是「Time+Day of Week」的唯一聚合结果,没有重复的维度组合,那你原来的计算逻辑和上述正确逻辑的输出结果是一致的;如果存在同一维度下的多条明细数据,必须使用先求和再算CPA的逻辑才能得到准确值。
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

