如何替换已弃用的get_duplicates()升级Pandas重复ID筛选代码?
解决Pandas中
get_duplicates()弃用后的重复ID筛选问题 我来帮你理清这个问题!警告里的idx其实就是你提取的那层ID索引——也就是my_data.index.get_level_values('ID')。咱们一步步把代码改对,实现你要的「选中所有重复ID对应行」的目标:
方法一:按警告提示的思路修改
先提取ID级别的索引,再找出所有重复的ID值,最后筛选对应行:
# 提取ID层的索引对象 id_idx = my_data.index.get_level_values('ID') # 找出所有重复的ID(去重后) duplicate_ids = id_idx[id_idx.duplicated()].unique() # 筛选所有包含重复ID的行 duplicates = my_data.loc[id_idx.isin(duplicate_ids)]
方法二:更简洁的直接筛选(推荐)
如果你的目标是直接获取所有重复ID对应的行,可以跳过“提取唯一重复ID”这一步,直接用duplicated(keep=False)标记所有重复的行(包括第一次出现的重复项):
# 标记所有ID重复的行(True表示该行的ID存在重复) is_duplicate = my_data.index.get_level_values('ID').duplicated(keep=False) # 直接筛选出这些行 duplicates = my_data[is_duplicate]
为什么你之前的尝试没成功?
你用pd.Index(my_data)是错误的——这个操作会把DataFrame的列名转换成索引对象,而不是你想要的行索引里的ID层。正确的做法是直接从my_data.index中提取ID级别的索引,也就是my_data.index.get_level_values('ID')。
内容的提问来源于stack exchange,提问作者Amani
相关产品推荐
相关产品推荐

