如何基于MultiIndex部分层级标记DataFrame的重复行?
高效标记多层MultiIndex中前两层首次出现的行
你可以直接通过操作MultiIndex层级实现更简洁高效的标记,无需创建临时列或额外DataFrame:
df['keeper'] = ~df.index.get_level_values([0, 1]).duplicated()
为什么这个方案更优?
- 性能更高:直接针对前两层索引做重复判断,省去了原代码里
assign创建临时列、drop_duplicates生成新DataFrame、isin匹配索引的冗余步骤,内存占用和计算耗时都更低,尤其适配大体积DataFrame。 - 可读性更强:代码逻辑直白,一眼就能看出是对前两层索引的首次出现行做标记。
- 扩展性好:如果需要标记前N层的首次出现行,只需把
[0,1]替换成list(range(N))即可,比如前3层就写list(range(3))。
示例验证
用你提供的DataFrame测试,执行上述代码后得到的结果和预期完全一致:
0 keeper lev0 lev1 lev2 1 1 1 0.696469 True 2 NaN False 2 3 0.719469 True 2 0.980764 False 3 1 NaN True
内容的提问来源于stack exchange,提问作者fantabolous
相关产品推荐
相关产品推荐

