如何在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
相关产品推荐
相关产品推荐

