如何提取DataFrame中SongId重复的所有行?
提取DataFrame中所有包含重复SongId的行
嘿,我懂你的困扰!你之前用的dfB[dfB.SongId.duplicated()]之所以效果不理想,是因为这个方法默认只标记第一次出现之后的重复项为True——也就是说,它只会返回重复组里除了第一行之外的其他行,而你想要的是所有包含重复SongId的行(包括第一次出现的那行)。
针对这个需求,有两种简单有效的方法:
方法一:使用duplicated(keep=False)
duplicated()方法的keep参数默认是'first',如果把它改成False,所有重复的行(不管是第一次还是后续出现的)都会被标记为True,直接筛选就能得到所有目标行:
dfB[dfB.SongId.duplicated(keep=False)]
这个方法最简洁,用它处理你的示例DataFrame,就能把SongId为0、10、16的所有行都提取出来。
方法二:先获取重复的SongId集合,再筛选
如果你想更清晰地拆解逻辑,可以先找出所有存在重复的SongId值,再筛选出包含这些值的所有行:
# 第一步:获取所有重复的SongId(去重后) duplicate_ids = dfB.SongId[dfB.SongId.duplicated()].unique() # 第二步:筛选出SongId在重复集合中的所有行 dfB[dfB.SongId.isin(duplicate_ids)]
这个方法的结果和方法一完全一致,只是逻辑拆分得更明确,适合需要中间处理重复ID的场景。
这两种方法都能完美解决你的问题,快试试吧!
内容的提问来源于stack exchange,提问作者joe borg
相关产品推荐
相关产品推荐

