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

Pandas多级索引:如何删除一级索引下二级索引唯一的行

Pandas三级索引DataFrame处理方案

一、保留三级索引值相同但二级索引值不同的数据

要实现保留三级索引(Index2)值相同,但对应二级索引(Index1)值不唯一的行,可按以下步骤操作:

  1. 按三级索引分组,统计每组内二级索引的唯一值数量
  2. 筛选出二级索引唯一值数量大于1的三级索引值
  3. 用这些值过滤原DataFrame

代码示例(假设索引已命名为idx1(一级)、idx2(二级)、idx3(三级)):

# 统计每个三级索引对应的二级索引唯一数量
idx3_valid = df.groupby(level='idx3')['idx2'].nunique() > 1
# 提取符合条件的三级索引值
valid_idx3_list = idx3_valid[idx3_valid].index
# 过滤DataFrame
filtered_df = df[df.index.get_level_values('idx3').isin(valid_idx3_list)]

如果索引未命名,可通过层级位置(level=0一级、level=1二级、level=2三级)操作:

# 按三级索引(level=2)分组,统计二级索引(level=1)的唯一数量
idx3_valid = df.groupby(level=2).apply(lambda x: x.index.get_level_values(1).nunique()) > 1
valid_idx3_list = idx3_valid[idx3_valid].index
filtered_df = df[df.index.get_level_values(2).isin(valid_idx3_list)]

二、统计一级索引对应的二级索引数量并删除数量为1的行

要统计每个一级索引下的二级索引数量,并删除数量为1的行,步骤如下:

  1. 按一级索引分组,统计每组内二级索引的唯一值数量
  2. 筛选出二级索引数量大于1的一级索引值
  3. 过滤原DataFrame保留符合条件的行

代码示例:

# 统计每个一级索引对应的二级索引唯一数量
idx1_valid = df.groupby(level='idx1')['idx2'].nunique() > 1
# 提取符合条件的一级索引值
valid_idx1_list = idx1_valid[idx1_valid].index
# 过滤DataFrame
final_df = filtered_df[filtered_df.index.get_level_values('idx1').isin(valid_idx1_list)]

也可以用transform方法直接在原DataFrame标记后筛选,更简洁:

# 给每行添加对应一级索引下的二级索引数量列
df['idx2_count'] = df.groupby(level='idx1')['idx2'].transform('nunique')
# 筛选出数量大于1的行,最后删除辅助列
final_df = df[df['idx2_count'] > 1].drop(columns='idx2_count')

内容的提问来源于stack exchange,提问作者encrypted-ninja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:54:11