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

JupyterLab中数据集百分比差异计算与绘图问题求助

问题解决:百分比差异计算错误与绘图空白问题

一、百分比差异计算修正

你得到全负数结果是因为分子顺序搞反了。根据你的需求(H5与CP的差值为正),需调整计算逻辑,同时要避免除以0的报错情况:

原错误代码:

diffs = []
for x, y in zip(MELT_data_h5['MELT'], MELT_data_CP['MELT']):
    sum = ((y - x) / x) * 100  # y是CP值、x是H5值,y-x为负,结果自然为负
    diffs.append(sum)

修正后代码(以CP为基准,计算H5相对CP的百分比差异):

diffs = []
for h5_val, cp_val in zip(MELT_data_h5['MELT'], MELT_data_CP['MELT']):
    # 避免CP值为0时的除以0错误
    if cp_val != 0:
        diff = ((h5_val - cp_val) / cp_val) * 100
    else:
        diff = float('nan')  # 标记为缺失值,后续绘图自动跳过
    diffs.append(diff)

如果需要以H5为基准计算CP的百分比差异,调整为:

diffs = []
for h5_val, cp_val in zip(MELT_data_h5['MELT'], MELT_data_CP['MELT']):
    if h5_val != 0:
        diff = ((cp_val - h5_val) / h5_val) * 100
    else:
        diff = float('nan')
    diffs.append(diff)

二、解决绘图空白问题

空白图的核心原因是你只设置了轴属性,没有将数据绘制到画布上。以下是完整的阶梯图/折线图方案:

完整绘图代码(阶梯图示例)

import matplotlib.pyplot as plt
import datetime
import pandas as pd

# 确保年份列是datetime格式(如果不是索引,替换为你的日期列名)
if not isinstance(MELT_data_h5.index, pd.DatetimeIndex):
    years = pd.to_datetime(MELT_data_h5['date_column'])
else:
    years = MELT_data_h5.index

# 绘制阶梯图
plt.step(years, diffs, where='mid', label='H5 vs CP % Difference')

# 设置轴参数
plt.xlim(datetime.datetime(1980,1,1), datetime.datetime(2023,1,1))
# 根据修正后的diffs调整Y轴范围(示例为0到400,可根据实际数据修改)
plt.ylim(0, 400)
plt.xlabel('Year', fontsize=15)
plt.ylabel('% Difference', fontsize=15)
plt.legend()
plt.grid(True)
plt.show()

关键注意点

  • 必须确保X轴的年份是datetime类型,matplotlib才能正确解析
  • 缺失值nan会被自动跳过,不影响绘图效果

三、效率优化建议

用pandas向量化运算替代循环,处理大数据集时效率更高:

import pandas as pd

# 直接按列计算百分比差异
diffs = ((MELT_data_h5['MELT'] - MELT_data_CP['MELT']) / MELT_data_CP['MELT']) * 100
# 将CP值为0的位置替换为缺失值
diffs = diffs.where(MELT_data_CP['MELT'] != 0, float('nan'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:43:30