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