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

如何在Pandas DataFrame中按列值子集检查重复索引

按分组检查DataFrame重复索引的解决方案

问题场景

现有如下DataFrame:

import pandas as pd

df_test = pd.DataFrame(data=[['AP1', 'House1'],
                             ['AP1', 'House1'], 
                             ['AP2', 'House1'], 
                             ['AP3', 'House2'], 
                             ['AP4','House2'], 
                             ['AP5', 'House2']],
                       columns=['AP', 'House'],
                       index=[0, 1, 2, 0, 1, 1])

需要按House列的每个值分组,检查组内是否存在重复索引:比如House1对应的3条记录索引无重复,House2对应的记录存在重复索引1。

之前尝试全局统计重复索引的代码:

print(f'{df_test.index.duplicated().sum()} repeated entries')

返回结果为3,这是因为该代码是全局统计所有重复索引,没有按分组分别计算。

解决方案

通过groupby结合索引重复检查方法,实现分组统计:

1. 统计每组内重复索引的数量

# 按House分组,计算每组重复索引的数量
grouped_dup_count = df_test.groupby('House').apply(lambda group: group.index.duplicated().sum())

print("每组重复索引数量:")
print(grouped_dup_count)

输出结果:

House
House1    0
House2    1
dtype: int64

2. 判断每组是否存在重复索引

如果只需要知道每组是否有重复索引(而非具体数量),可以用以下代码:

# 检查每组是否存在重复索引
has_dup_index = df_test.groupby('House').apply(lambda group: group.index.duplicated().any())

print("\n每组是否存在重复索引:")
print(has_dup_index)

输出结果:

House
House1    False
House2     True
dtype: bool

代码说明

  • groupby('House'):将DataFrame按House列的不同值分组
  • group.index.duplicated():对每个分组的索引生成布尔数组,标记该索引是否为重复项
  • .sum():统计分组内重复索引的总数量;.any():判断分组内是否存在至少一个重复索引

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:55:06