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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:09:03