2017-09-16 4 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 

は今、あなたは Xb列に対応する必要はありません c列と Yに対応する必要がないことがわかります。私は、マルチレベルのインデックスを作成するときに今、私は、データフレームは次のようになりたい:

 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 

あなたが見ることができるように、私はすべての上位レベルの列が持つべきであるような方法で分割したいです同じ下位レベルの列。データセットはpositveなので、欠落している列に-1を書き込むことを考えていますが、これについての提案は公開されています。問題に最も近いのはthis answerでした。しかし、以前の質問のようにMultiLevel Indexで何とか動作させることはできません。どんな助けもありがとうございます。

答えて

2

MultiIndexを作成し、df.columnsと設定します。既存のMultiIndexと今

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 

は、新しいインデックスを作成し、 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 
関連する問題