Pandas绘制小时维度箱线图报Index contains duplicate entries错误求助
问题原因
你遇到的报错是因为unstack()操作要求待转换的行索引必须全局唯一:
- 你用
append=True将小时作为二级索引追加到原有索引后,全量数据的组合索引存在重复条目,因此触发报错 - 分段截取数据时,对应片段的索引刚好没有重复,所以可以正常运行
解决方案
你不需要用unstack变形数据即可实现按小时分布的箱线图绘制,推荐两种可行写法:
方案1:直接使用pandas分组箱线图(最简便)
直接通过boxplot的by参数指定分组维度即可,无需修改索引:
# 提取小时字段 df['hour'] = df['DateTime'].dt.hour # 按小时分组绘制Val1的箱线图 df.boxplot(column='Val1', by='hour', figsize=(15, 5))
方案2:修复原有逻辑的索引问题
如果你要保留原有写法,只需要提前重置原始索引保证全局唯一即可:
# 先重置索引消除原始索引重复问题 df = df.reset_index(drop=True) # 原有逻辑即可正常运行 df.set_index(df.DateTime.dt.hour, append=True)["Val1"].unstack().plot.box(figsize=(15,5))
两种方案都会保留每个小时的所有数值,完整展示分布和异常值,不需要删除任何重复小时的数据。
内容的提问来源于stack exchange,提问作者Fluxy
相关产品推荐
相关产品推荐

