繁体   English   中英

折叠特定的多索引列熊猫数据框

[英]Collapse specific multiindex columns pandas dataframe

我正在导入一个具有以下结构的 Excel 文件:

|    | Cat 1 |    |    |    | Cat 2 |    |    | Total |
|code|   a   |  b |  c |  d |   a   |  b |  c |       |
|data| data  |data|data|data| data  |data|data| data  |

我想将信息保留在双标题行中,因此我使用:

df = pd.read_excel(file, sheet, header=[0,1]

但这给了我以下 MultiIndex: print(df.columns)

MultiIndex([('Unnamed: 0_level_0',              'code'),
            (             'Cat 1',                 'a'),
            (             'Cat 1',                 'b'),
            etc.
            (             'Cat 2',                 'a'),
            (             'Cat 2',                 'b'),
            etc.
            (             'Total','Unnamed: 8_level_1')],)

我正在寻找一种方法来折叠unnamed: x_level_y列,以便我可以简单地使用df['code']df['Total']访问它们。 我已经尝试过df.rename(columns={'Unnamed: 0_level_0: ''}) ,但是如果我不知道缺少哪些级别,这是不可概括的,并且不允许我只访问该列单层名称。 我发现的其他答案是关于删除列名中包含Unnamed的任何列,但我想保留这些列及其包含的数据。

您可以重新创建 MultiIndex 并将现有名称放在任何级别包含Unnamed的所有列的级别 0 中:

df.columns = pd.MultiIndex.from_tuples(
    [(c[1],'') if 'Unnamed' in c[0] else 
     (c[0],'') if 'Unnamed' in c[1] else
     c 
     for c in df.columns.to_list()])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM