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

在Pandas中实现Excel同款同环境进程对比%improve列的技术疑问

在Pandas中实现同环境进程性能对比与%improve列计算

核心逻辑

先按环境字段分组,每组内确保进程顺序(比如旧版本在前、新版本在后),再计算当前进程与同组上一条进程的性能差异百分比,完全匹配你要的Excel功能。

假设你的DataFrame结构示例:

import pandas as pd

df = pd.DataFrame({
    '环境': ['测试环境A', '测试环境A', '生产环境B', '生产环境B'],
    '进程': ['旧版本进程', '新版本进程', '旧版本进程', '新版本进程'],
    '性能指标': [100, 80, 200, 150]  # 示例为耗时,数值越小性能越好
})

填充BuildTable函数的实现代码

方案1:分组+shift计算(直观易读)

def BuildTable(df):
    # 按环境分组,每组内按进程排序(保证基准进程在前)
    df = df.sort_values(['环境', '进程'], ascending=[True, True])
    # 计算同环境下与上一条的性能提升百分比
    df['%improve'] = df.groupby('环境')['性能指标'].apply(
        lambda x: (x.shift(1) - x) / x.shift(1) * 100
    ).round(2)
    # 填充组内第一条无对比数据的空值
    df['%improve'] = df['%improve'].fillna('-')
    return df

方案2:transform简化写法(高效简洁)

def BuildTable(df):
    df = df.sort_values(['环境', '进程'])
    # 分组获取同环境的上一条性能指标
    prev_perf = df.groupby('环境')['性能指标'].shift(1)
    # 计算提升百分比,处理异常值
    df['%improve'] = ((prev_perf - df['性能指标']) / prev_perf * 100).round(2)
    df['%improve'] = df['%improve'].replace([pd.NA, float('inf'), float('-inf')], '-')
    return df

关键细节说明

  • 分组规则:必须以环境为分组键,避免跨环境对比
  • 排序要求:如果原始数据中进程顺序混乱,一定要先排序,确保对比基准(比如旧版本)在每组的第一条
  • 指标适配:如果你的性能指标是吞吐量(数值越大越好),公式需调整为(x - x.shift(1))/x.shift(1)*100
  • 空值处理:每组第一条无前置数据,用-或其他标识填充更符合业务展示需求

示例输出

运行函数后得到的结果:

环境进程性能指标%improve
测试环境A旧版本进程100-
测试环境A新版本进程8020.00
生产环境B旧版本进程200-
生产环境B新版本进程15025.00

内容的提问来源于stack exchange,提问作者h ca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:24:55