将列拆分为MultiIndex,在pandas中缺少列

Moh*_*hif 5 python multi-index dataframe pandas

这类似于我在这里问的问题.但是,我发现我工作的数据并不总是一致的.例如说:

import pandas as pd

df = pd.DataFrame(pd.DataFrame([[1,2,3,4],[5,6,7,8],[9,10,11,12]],columns=["X_a","Y_c","X_b","Y_a"]))

   X_a  Y_c  X_b  Y_a
0    1    2    3    4
1    5    6    7    8
2    9   10   11   12
Run Code Online (Sandbox Code Playgroud)

现在您可以看到X没有相应的c列并且Y没有相应的b列.现在,当我想创建多级索引时,我希望数据框看起来像这样:

     X             Y
     a    b   c    a    b   c
0    1    3   -1   4   -1   2
1    5    7   -1   8   -1   6
2    9   11   -1  12   -1  10
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我希望以这样的方式进行拆分,即所有上级列应具有相同的低级列.由于数据集是正面的,我正在考虑用-1填充缺失的列,尽管我愿意接受这方面的建议.我发现问题最接近的是这个答案.但是,我不能像以前的问题那样以某种方式使用MultiLevel Index.任何帮助表示赞赏.

cs9*_*s95 7

创建一个MultiIndex并设置df.columns.

idx = df.columns.str.split('_', expand=True)
idx
MultiIndex(levels=[['X', 'Y'], ['a', 'b', 'c']],
           labels=[[0, 1, 0, 1], [0, 2, 1, 0]])

df.columns = idx
Run Code Online (Sandbox Code Playgroud)

现在,使用现有的MultiIndex,创建一个新索引并将其用于reindex原始索引.

idx = pd.MultiIndex.from_product([idx.levels[0], idx.levels[1]])
idx
MultiIndex(levels=[['X', 'Y'], ['a', 'b', 'c']],
       labels=[[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]])

df.reindex(columns=idx, fill_value=-1)
   X          Y       
   a   b  c   a  b   c
0  1   3 -1   4 -1   2
1  5   7 -1   8 -1   6
2  9  11 -1  12 -1  10
Run Code Online (Sandbox Code Playgroud)