>>> df
a
b c
0 1 2
1 3 4
>>> df = df.xs('a', axis=1, drop_level=True)
# 'a' : key on which to get cross section
# axis=1 : get cross section of column
# drop_level=True : returns cross section without the multilevel index
>>> df
b c
0 1 2
1 3 4
new_columns_cdnr = []
for column in list(df.columns):
new = [x for x in list(column) if not 'unnamed' in x.lower()]
new_columns_cdnr.append(new[-1])
df.columns = new_columns_cdnr
8条答案
按热度按时间ni65a41a1#
您可以使用
MultiIndex.droplevel
:5gfr0r5j2#
从Pandas0.24.0开始,我们现在可以使用DataFrame.droplevel():
如果您希望保持DataFrame方法链滚动,这将非常有用。
t0ybt7op3#
删除索引的另一种方法是使用列表解析:
如果您想合并两个级别的名称,此策略也很有用,例如下面的示例,其中底部级别包含两个'y':
删除顶层会留下两个索引为'y'的列。这可以通过将名称与列表解析连接来避免。
这是我在执行groupby后遇到的问题,花了一段时间才找到解决它的this other question。
pgx2nnw84#
另一种方法是使用.xs方法,基于
df
的横截面重新分配df
。py49o6xq5#
使用
sum
和level=1的一个小技巧(当level=1是唯一的时有效)更常见的解决方案
get_level_values
7z5jn7bk6#
您也可以通过重命名列来实现这一点:
df.columns = ['a', 'b']
这涉及手动步骤,但可能是一个选项,尤其是在最终重命名数据框时。
im9ewurl7#
我一直在努力解决这个问题,因为我不知道为什么我的droplevel()函数不起作用。通过几个工作,了解表中的'a'是列名,'b','c'是索引。这样做会有所帮助。
cqoc49vn8#