分组、透视、合并操作后极易产生重复索引,索引重复会引发赋值、筛选、绘图报错,本篇覆盖重复索引全套修复方案,区分唯一索引、非唯一索引业务场景。
场景:多区域销售数据拼接后行索引重复,完成索引重复检测、两种修复方案:重置连续索引、合并同索引重复行数据。核心知识点:index.is_unique索引唯一性判断、reset_index重置索引、groupby(level=0)合并重复索引、duplicated()索引查重。① 字段含义说明
索引(原重复索引):date 日期,存在多条相同日期记录② 生成带重复索引测试数据
import pandas as pdimport numpy as np# 构造重复日期索引date_list = ["2026-01-01","2026-01-01","2026-01-02","2026-01-02","2026-01-03","2026-01-03"]df = pd.DataFrame({ "sale_amt": np.random.uniform(8000, 32000, 6).round(2), "order_cnt": np.random.randint(20, 180, 6), "user_cnt": np.random.randint(10, 90, 6)}, index=pd.to_datetime(date_list))df.index.name = "date"df.to_excel("dup_index_data.xlsx")print("重复索引时序销售数据生成完成")print("原始索引是否唯一:", df.index.is_unique)
③ 核心清洗代码
import pandas as pddf = pd.read_excel("dup_index_data.xlsx", index_col="date")# 1. 检测重复索引dup_index_mask = df.index.duplicated()print("重复索引行布尔标记:", dup_index_mask.tolist())# 方案1:直接重置索引,生成连续数字主键(通用快速修复)df_reset = df.reset_index()print("\n方案1-重置索引后数据:")print(df_reset)# 方案2:合并相同索引重复行,按日期汇总指标(业务统计场景首选)df_merge = df.groupby(level=0).agg({ "sale_amt": "sum", "order_cnt": "sum", "user_cnt": "sum"})print("\n方案2-合并重复索引后汇总数据:")print(df_merge)
结果展示
总结
索引重复会破坏切片、赋值、时序运算稳定性;简单导出/绘图用reset_index快速修复;需要保留日期维度统计时,用groupby(level=0)合并同索引数据;数据导入后优先检测index.is_unique提前规避报错。