2017-02-15 70 views
1

給定兩個熊貓數據幀dfadfb,我如何確保每個DataFrame的MultiIndex包含所有其他行?填寫丟失的DataFrame索引

In [147]: dfa 
Out[147]: 
     c 
a b  
0 5 10.0 
1 6 11.0 
2 7 12.0 
3 8 13.5 
4 9 14.0 

In [148]: dfb 
Out[148]: 
     c 
a b  
0 5 10 
2 7 12 
3 8 13 
4 9 14 

這裏,dfb缺乏指數(1,6):

In [149]: dfa - dfb 
Out[149]: 
     c 
a b  
0 5 0.0 
1 6 NaN 
2 7 0.0 
3 8 0.5 
4 9 0.0 

...但dfa也可能缺乏從dfb指數。值應該是0,我們在每個數據幀中插入缺少的索引。

換句話說,每個數據幀的指數應該是兩個MultiIndexes,其中添加的行得到的0

回答

1

我認爲你需要DataFrame.sub與參數fill_value如果需要更換NaN一定值的值的工會:

df = dfa.sub(dfb, fill_value=0) 
print (df) 
     c 
a b  
0 5 0.0 
1 6 11.0 
2 7 0.0 
3 8 0.5 
4 9 0.0 
df = dfb.sub(dfa, fill_value=0) 
print (df) 
     c 
a b  
0 5 10 
1 6 0 
2 7 12 
3 8 13 
4 9 14 

或者,如果索引需要union添加reindex

mux = dfa.index.union(dfb.index) 
print (mux) 
MultiIndex(levels=[[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]], 
      labels=[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4]], 
      names=['a', 'b'], 
      sortorder=0) 

print (dfa.reindex(mux, fill_value=0)) 
     c 
a b  
0 5 10.0 
1 6 11.0 
2 7 12.0 
3 8 13.5 
4 9 14.0 

print (dfb.reindex(mux, fill_value=0)) 
     c 
a b  
0 5 10 
1 6 0 
2 7 12 
3 8 13 
4 9 14