Python 将列转换为多索引

Python 将列转换为多索引,python,pandas,indexing,Python,Pandas,Indexing,如何打开此数据帧的第一列,它是字符串和整数的混合 df=pd.DataFrame( [ [“标题1”、“a”、“b”、“c”、“d”], [1, 2, 3, 4, 5], [10, 2, 3, 4, 5], [100, 2, 3, 4, 5], [“标题2”、“a”、“b”、“c”、“d”], [1, 2, 3, 4, 5], [10, 2, 3, 4, 5], [100, 2, 3, 4, 5], [“标题3”、“a”、“b”、“c”、“d”], [1, 2, 3, 4, 5], [10, 2

如何打开此数据帧的第一列,它是字符串和整数的混合

df=pd.DataFrame(
[
[“标题1”、“a”、“b”、“c”、“d”],
[1, 2, 3, 4, 5],
[10, 2, 3, 4, 5],
[100, 2, 3, 4, 5],
[“标题2”、“a”、“b”、“c”、“d”],
[1, 2, 3, 4, 5],
[10, 2, 3, 4, 5],
[100, 2, 3, 4, 5],
[“标题3”、“a”、“b”、“c”、“d”],
[1, 2, 3, 4, 5],
[10, 2, 3, 4, 5],
[100, 2, 3, 4, 5],
]
)
像这样

title1  a   b   c   d
1       2   3   4   5
10      2   3   4   5
100     2   3   4   5
title2  a   b   c   d
1       2   3   4   5
10      2   3   4   5
100     2   3   4   5
title3  a   b   c   d
1       2   3   4   5
10      2   3   4   5
100     2   3   4   5
进入一个
多索引
,顶级为字符串,第二级为整数

            a   b   c   d
title1  1   2   3   4   5
        10  2   3   4   5
        100 2   3   4   5
title2  1   2   3   4   5
        10  2   3   4   5
        100 2   3   4   5
title3  1   2   3   4   5
        10  2   3   4   5
        100 2   3   4   5
使用:


这类问题的关键是创建一个布尔序列,标识0级索引的位置


mask = df[1].str.contains('a')   # Identify the rows containing the level_0 multiindex

header = df.loc[0,1:4].to_list()   # Get header list

df[-1] = df[0].where(mask).ffill()   # Create a seperate level_0 column

result = (df[~mask.fillna(False)]
            .set_index([-1,0])
            .astype(int)
            .rename_axis([None,None])
            .set_axis(header,axis=1,inplace=False))

每行实际数据中的值a、b、c、d是否相同?@jezrael是的,它们是相同的。超级,所以答案应该很好。我如何命名两个索引列以显示,比如,标题上方的
i1
,以及
[1,10100]
上方的
i2
?@Casimir-change
。重命名_轴((无,无))
。重命名_轴(('i1','i2'))

mask = df[1].str.contains('a')   # Identify the rows containing the level_0 multiindex

header = df.loc[0,1:4].to_list()   # Get header list

df[-1] = df[0].where(mask).ffill()   # Create a seperate level_0 column

result = (df[~mask.fillna(False)]
            .set_index([-1,0])
            .astype(int)
            .rename_axis([None,None])
            .set_axis(header,axis=1,inplace=False))