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

如何在Python中对Pandas数据集实现Excel透视表转换及差值计算

Pandas透视表转换及报错解决方案

报错KeyError: 'Region'原因

你指定pivot_table的index参数为Region,但你原始数据集只有ParamID、EquipmentID、SetValue三个字段,不存在Region字段,因此触发键值不存在错误。

实现目标表结构的正确步骤

步骤1:导入依赖并读取数据

import pandas as pd
import numpy as np

# 读取原始CSV文件
df = pd.read_csv("你的文件路径.csv")

步骤2:生成透视表

以ParamID为索引,EquipmentID为列名,SetValue为对应值生成透视表,若同一个ParamID+EquipmentID对应唯一一条SetValue记录,直接用pivot方法即可:

pivot_df = df.pivot(
    index="ParamID",
    columns="EquipmentID",
    values="SetValue"
)

如果存在重复的组合记录,用pivot_table指定聚合规则即可,比如取第一条记录:

pivot_df = df.pivot_table(
    index="ParamID",
    columns="EquipmentID",
    values="SetValue",
    aggfunc="first"
)

步骤3:新增Difference差值列

如果需要保留原始缺失值标注,差值计算直接对应列相减即可,缺失值对应的差值会自动标注为NaN:

# 当EquipmentID取值为Line1、Line2时
pivot_df['Difference'] = pivot_df['Line1'] - pivot_df['Line2']

如果需要将缺失值替换为0后再计算差值:

pivot_df['Difference'] = pivot_df['Line1'].replace(np.nan, 0) - pivot_df['Line2'].replace(np.nan, 0)

EquipmentID取值为数字21、22时报KeyError: '21'的原因

原始数据中EquipmentID的取值为数字类型(int/float)时,透视表生成的列名也是对应数字类型,你使用字符串'21'作为键取值时,无法匹配到数字类型的列名21,因此触发报错。
解决方法直接使用数字作为列名索引即可:

pivot_df['Difference'] = pivot_df[21].replace(np.nan, 0) - pivot_df[22].replace(np.nan, 0)

如果不确定列名类型,可执行print(pivot_df.columns)查看列的具体值和类型。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:15:02