无需networkx,按索引值对Pandas数据集去重的更Pythonic方法
解决方案
针对你需要按索引(id)分组,保留每个组内code唯一值的需求,这里提供几个更简洁、Pythonic的实现方式:
方案1:利用groupby + unique + explode
直接按索引分组,提取每组唯一的code后展开,无需手动处理索引名称:
df = df.groupby(level=0)['code'].unique().explode().reset_index(name='code').set_index(df.index.name or 'index')
- 逻辑清晰,直接对应“按id分组去重”的需求
- 适配性强:无论索引是否有名称都能正常工作(
df.index.name or 'index'处理无索引名的情况)
方案2:优化重置索引的写法
针对你原代码的痛点,优化后可兼容无索引名的场景:
temp_df = df.reset_index(drop=False) result_df = temp_df.drop_duplicates().set_index(temp_df.columns[0])
- 核心改进:用
temp_df.columns[0]自动获取原索引对应的列名,无需手动指定,解决了索引无名称时的失效问题
方案3:直接生成唯一标识过滤(无需操作索引)
通过组合索引和code生成唯一标识,直接过滤重复项,完全不需要重置/设置索引:
# 生成由索引和code组成的唯一元组序列 unique_keys = pd.Series(list(zip(df.index, df['code']))) # 过滤掉重复的项 df = df[~unique_keys.duplicated()]
- 全程不改动索引结构,最贴合你“不应重置索引”的诉求
- 原理:利用元组的可哈希性,将索引和
code的组合作为去重依据,精准过滤每组内的重复code
内容的提问来源于stack exchange,提问作者Michael Tuchman
相关产品推荐
相关产品推荐

