2016-11-11 157 views
5

我有結構性這樣2個類似的數據幀的多指標數據框:合併在熊貓

ind = pd.MultiIndex.from_product([['Day 1','Day 2'],['D1','D2'],['Mean','StDev','StErr']], names = ['interval','device','stats']) 
df = pd.DataFrame({'col1':[1,2,3,4,5,6,7,8,9,10,11,12]}, index = ind) 
print(df) 

         col1 
interval device stats  
Day 1 D1  Mean  1 
       StDev  2 
       StErr  3 
     D2  Mean  4 
       StDev  5 
       StErr  6 
Day 2 D1  Mean  7 
       StDev  8 
       StErr  9 
     D2  Mean  10 
       StDev 11 
       StErr 12 

ind2 = pd.MultiIndex.from_product([['Day 1','Day 2'],['D1','D2'],['Ratio']], names = ['interval','device','stats']) 
df2 = pd.DataFrame({'col1':[100,200,300,400]}, index = ind2) 
print(df2) 

         col1 
interval device stats  
Day 1 D1  Ratio 100 
     D2  Ratio 200 
Day 2 D1  Ratio 300 
     D2  Ratio 400 

我試圖把它們合併得到這個:

     col1 
interval device stats  
Day 1 D1  Mean  1 
       StDev  2 
       StErr  3 
       Ratio 100 
     D2  Mean  4 
       StDev  5 
       StErr  6 
       Ratio 200 
Day 2 D1  Mean  7 
       StDev  8 
       StErr  9 
       Ratio 300 
     D2  Mean  10 
       StDev 11 
       StErr 12 
       Ratio 400 

我嘗試了一堆不同的東西使用join,concatmerge,但最近我能得到的是使用df3 = pd.concat([df, df2], axis=1)。不幸的是,讓我:

      col1 col1 
interval device stats    
Day 1 D1  Mean  1 NaN 
       Ratio NaN 100 
       StDev  2 NaN 
       StErr  3 NaN 
     D2  Mean  4 NaN 
       Ratio NaN 200 
       StDev  5 NaN 
       StErr  6 NaN 
Day 2 D1  Mean  7 NaN 
       Ratio NaN 300 
       StDev  8 NaN 
       StErr  9 NaN 
     D2  Mean  10 NaN 
       Ratio NaN 400 
       StDev 11 NaN 
       StErr 12 NaN 

回答

5

使用concat的時候,因爲這意味着附加列明智的,而不是按行不要使用axis=1。你想axis=0進行行,這恰好是默認的,所以你並不需要指定它:

df3 = pd.concat([df, df2]).sort_index() 

輸出結果:

     col1 
interval device stats  
Day 1 D1  Mean  1 
       Ratio 100 
       StDev  2 
       StErr  3 
     D2  Mean  4 
       Ratio 200 
       StDev  5 
       StErr  6 
Day 2 D1  Mean  7 
       Ratio 300 
       StDev  8 
       StErr  9 
     D2  Mean  10 
       Ratio 400 
       StDev 11 
       StErr 12