2016-11-11 20 views
5

मैं इस तरह संरचित 2 समान डेटा फ्रेम है में multiindex dataframe विलय: मैं उन्हें एक करना कोशिश कर रहा हूँपांडा

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, concat, और merge का उपयोग करके, लेकिन निकटतम मैं प्राप्त करने में सक्षम हूं 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