Pandas绘制Label=1的Type维度时间序列多线图(解决pivot报错)
报错原因
ValueError: Index contains duplicate entries, cannot reshape 触发的核心原因有两点:
- 原生
df.pivot方法要求「索引字段、分列字段的组合必须唯一」,样例数据中同一日期下对应同一个Type存在多条记录,不满足透视前提 - 你代码中写的
values='y'与当前数据集结构不匹配,实际存储目标值的字段为Label
实现步骤
- 统一日期格式
将字符串格式的Date列转为标准日期类型,避免时间轴排序错乱:df['Date'] = pd.to_datetime(df['Date']) - 筛选目标样本
过滤出Label取值为1的观测记录:df_filtered = df[df['Label'] == 1] - 替换透视方法
使用自带聚合逻辑的pivot_table替代原生pivot,根据分析目标选择对应聚合方式处理重复的日期+Type组合:- 若需统计每个日期下对应Type的Label=1样本数量,选择计数聚合:
pivot_result = df_filtered.pivot_table( index='Date', columns='Type', values='Label', aggfunc='count' # 筛选后所有样本Label=1,count与sum的计算结果完全等价 ) - 若仅需标记每个日期下对应Type是否存在Label=1的样本(输出0/1二值结果),选择取最大值聚合:
pivot_result = df_filtered.pivot_table( index='Date', columns='Type', values='Label', aggfunc='max' )
- 若需统计每个日期下对应Type的Label=1样本数量,选择计数聚合:
- 绘制多线时间序列图
透视完成后直接调用pandas内置绘图接口,每个Type类别会自动生成独立折线:pivot_result.plot(figsize=(10, 6), ylabel='Label=1的样本统计值')
内容的提问来源于stack exchange,提问作者LdM
相关产品推荐
相关产品推荐

