Pandas按分组计算相对于组内B='a'行ctr的百分比变动实现方法
高效实现方案
不需要遍历分组,直接用pandas分组的transform方法实现向量化计算,性能远高于手动循环拼接:
# 按A列(索引level 0)分组,提取每个分组内B='a'对应的ctr基准值,广播到分组内所有行 base_ctr = grp_df.groupby(level=0)['ctr'].transform( lambda group: group[group.index.get_level_values('B') == 'a'].iloc[0] ) # 直接计算相对变化率 grp_df['relative_p'] = (grp_df['ctr'] - base_ctr) / base_ctr
说明
- 该方法完全走pandas内置的向量化运算,分组数量越多,性能优势越明显
- 不需要硬套
pct_change():pct_change()的逻辑是和前一行/前N行做对比,你的需求是固定和组内特定行对比,用上述方法更直接,逻辑也更清晰 - 计算结果和预期输出完全一致,不需要额外处理索引或者拼接数据
内容的提问来源于stack exchange,提问作者haneulkim
相关产品推荐
相关产品推荐

