如何在Pandas多索引中移除单列的一个层级
移除DataFrame列MultiIndex中的指定层级
嘿,我来帮你搞定这个问题!看起来你是在处理带有多层级列索引的DataFrame,想要移除整个包含a和b的letters层级,而不是删掉这两个子列对吧?完全不用drop()方法,咱们直接通过修改列索引就能实现。
先确认你的列结构
首先得明确你的列索引层级,先跑个命令看看:
print(df.columns)
举个例子,输出可能是这样的(假设层级名称分别是main_col、sub_category、detail):
MultiIndex([('col1', 'letters', 'a'), ('col1', 'letters', 'b'), ('col2', 'numbers', '1')], names=['main_col', 'sub_category', 'detail'])
这里letters就是sub_category层级下的一个分类,咱们要移除的就是sub_category这个层级。
两种方法移除目标层级
方法1:通过层级名称移除
如果你清楚要移除的层级的名称(比如上面的sub_category),直接用droplevel()指定名称就行:
# 移除名为sub_category的层级 df.columns = df.columns.droplevel('sub_category')
方法2:通过层级位置移除
要是你记不清层级名称,但知道它的位置(索引从0开始计数),比如letters所在的层级是第1位,那就直接传位置参数:
# 移除第1层索引(从0开始数) df.columns = df.columns.droplevel(1)
执行完之后,你的列索引就会变成这样,letters层级完全消失,a和b直接挂在col1下面:
MultiIndex([('col1', 'a'), ('col1', 'b'), ('col2', '1')], names=['main_col', 'detail'])
特殊情况:如果col1是单个列且值为MultiIndex
要是你的col1是DataFrame里的单独一列,而且列里的每个值都是类似('letters', 'a')的元组(也就是值是MultiIndex结构),那可以用apply提取元组里的目标部分:
# 提取元组的第二个元素,去掉'letters'部分 df['col1'] = df['col1'].apply(lambda x: x[1])
不过这种情况比较少见,大概率还是列的多层级索引场景符合你的需求。
内容的提问来源于stack exchange,提问作者user2343952
相关产品推荐
相关产品推荐

