如何在Pandas DataFrame中仅删除含指定模式的重复索引?
解决DataFrame中仅删除特定模式重复索引的问题
需求:处理带重复索引的DataFrame时,仅删除索引包含Sum_模式的重复项,其余重复索引(如X、Y)需保留。
示例DataFrame
创建代码:
import pandas as pd tt = pd.DataFrame({'A':[1,2,3,10,10,2,3,4,20,20]}, index=['Sum_2019','X','Y','Sum_2020','Sum_2020','X','Y','Z','Sum_2021','Sum_2021'])
输出:
A Sum_2019 1 X 2 Y 3 Sum_2020 10 Sum_2020 10 X 2 Y 3 Z 4 Sum_2021 20 Sum_2021 20
期望输出
仅移除Sum_开头的重复索引,保留其他重复项:
A Sum_2019 1 X 2 Y 3 Sum_2020 10 X 2 Y 3 Z 4 Sum_2021 20
错误尝试
使用df= df[~df.index.duplicated(keep='first')]会删除所有重复索引,包括需要保留的X、Y,不符合需求。
正确解决方案
通过组合模式匹配和重复索引判断生成掩码,精准删除目标行:
# 生成掩码:标记出索引含'Sum_'且为重复项的行 mask = tt.index.str.contains('Sum_') & tt.index.duplicated(keep='first') # 筛选出不需要删除的行 result = tt[~mask] print(result)
逻辑说明
tt.index.str.contains('Sum_'):识别所有索引包含Sum_的行,返回布尔数组tt.index.duplicated(keep='first'):识别重复索引,仅标记除第一个外的重复项,返回布尔数组- 两者取交集(
&)得到需要删除的行的掩码,取反(~)后筛选即可得到目标结果
内容的提问来源于stack exchange,提问作者Chronicles
相关产品推荐
相关产品推荐

