2016-11-11 30 views
5

tôi có 2 khung tương tự như dữ liệu có cấu trúc như thế này:sáp nhập dataframe multiindex trong gấu trúc

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 

Tôi đang cố gắng để kết hợp chúng để có được điều này:

     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 

Tôi đã thử một loạt các thứ khác nhau sử dụng join, concatmerge nhưng gần nhất tôi có thể nhận được là sử dụng df3 = pd.concat([df, df2], axis=1). Thật không may rằng mang lại cho tôi điều này:

      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 

Trả lời

5

Không sử dụng axis=1 khi sử dụng concat, vì nó có nghĩa là phụ thêm cột-khôn ngoan, không chèo-khôn ngoan. Bạn muốn axis=0 cho hàng-khôn ngoan, mà sẽ xảy ra là mặc định, vì vậy bạn không cần phải xác định nó:

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

Kết quả là đầu ra:

     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 
Các vấn đề liên quan