2017-09-16 85 views
0

这与我要求的问题类似here。但是,我发现我工作的数据并不总是一致的。对于,例如说:将列拆分为MultiIndex并在熊猫中丢失列

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 

现在你可以看到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 

因此,大家可以看到,我想以这样的方式,所有的上层列应有的断续同样的较低级别的列。由于数据集是正确的,我正在考虑用-1填充缺失的列,尽管我对此有所建议。我发现我的问题最接近的是this answer。但是,我无法像在我之前的问题中那样以某种方式使用MultiLevel Index。任何帮助表示赞赏。

回答

2

创建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 

现在,与现有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