pandas使用pivot转换DataFrame时报KeyError及重复索引错误如何解决
你的原始DataFrame结构如下:
报错原因说明
- 第一次调用
pivot报KeyError: 'time',是因为此时time已经是df2的索引,不属于DataFrame的普通列,pivot的index参数默认从普通列中查找指定字段,因此找不到对应字段报错。 - 重置索引后调用
pivot报ValueError,是因为你的数据中存在多组time和sub_transformer取值完全相同的重复行,pivot要求这两个字段的组合必须唯一,因此无法直接完成重构。
可行解决方案
方案1:使用pivot_table处理重复值(推荐)
如果重复值属于业务允许的情况,可通过指定聚合规则处理重复项,不需要提前重置索引:
result = df2.pivot_table( index=df2.index, # 直接复用已有的time索引 columns='sub_transformer', values='value', aggfunc='first' # 重复时取第一个值,可按需替换为'mean'/'sum'/'max'等聚合函数 )
方案2:先去重再调用pivot
如果你确认重复条目是无效的异常数据,可先去重再做转换:
# 重置索引后对time和sub_transformer组合去重,保留第一条数据 df_clean = df2.reset_index().drop_duplicates(subset=['time', 'sub_transformer'], keep='first') result = df_clean.pivot(index='time', columns='sub_transformer', values='value')
两种方案最终输出的结果都会保持time为索引,将sub_transformer的不同取值作为新列,完全符合你的需求。
内容的提问来源于stack exchange,提问作者user13696679
相关产品推荐
相关产品推荐

