Python合并两个数据透视表并新增差值、百分比变化计算列的实现方法
Python合并透视表并计算差值/百分比变化实现方案
前置准备
首先确保你已经导入了所需依赖:
import pandas as pd import numpy as np
你现有的两张透视表Old和New都采用了二级列索引(第一层为PAID,第二层为数据源IP/OP/PR)、二级行索引(CLAIM_VENDOR、PYYMM),可以直接按索引对齐拼接后做计算。
完整实现代码
# 1. 按行索引对齐拼接两张表,用后缀区分新旧表字段 merged = New.join(Old, how='left', rsuffix='_旧', lsuffix='_新') # 2. 遍历三个数据源,分别计算差值和百分比变化 sources = ['IP', 'OP', 'PR'] for s in sources: # 计算月度差值:新表值 - 旧表值 merged[('差值', s)] = merged[('PAID_新', s)] - merged[('PAID_旧', s)] # 计算百分比变化:(差值/旧表值)*100,处理空值、除以0的异常情况 merged[('变化率(%)', s)] = (merged[('差值', s)] / merged[('PAID_旧', s)]) * 100 # 旧表不存在的202003月、旧表值为0的情况,填充成合理的空值标识 merged[('变化率(%)', s)] = merged[('变化率(%)', s)].replace([np.inf, -np.inf], np.nan) # 可选:调整列顺序,把同一数据源的字段放在一起方便查看 merged = merged.sort_index(axis=1, level=1)
结果说明
- 拼接采用
how='left'保留新表全部数据,旧表没有的202003月对应的旧表值、差值、变化率会自动置为NaN,符合业务逻辑 - 新增的6个计算列同样采用二级列索引,第一层为
差值/变化率(%),第二层为对应数据源,和原有字段结构统一 - 针对旧表值为0导致的除以0问题,自动替换为NaN避免报错
内容的提问来源于stack exchange,提问作者ksoleil
相关产品推荐
相关产品推荐

