如何在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
相关产品推荐
相关产品推荐

