You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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)

逻辑说明

  1. tt.index.str.contains('Sum_'):识别所有索引包含Sum_的行,返回布尔数组
  2. tt.index.duplicated(keep='first'):识别重复索引,仅标记除第一个外的重复项,返回布尔数组
  3. 两者取交集(&)得到需要删除的行的掩码,取反(~)后筛选即可得到目标结果

内容的提问来源于stack exchange,提问作者Chronicles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:12:45