2016-12-18 10 views
6

में बहु कॉलम अनुक्रमणिका सेट करें मैं इस तरह डेटाफ्रेम बना देता हूं।पांडा

df = pd.DataFrame({ 
    'class' : ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'], 
    'number' : [1,2,3,4,5,1,2,3,4,5], 
    'math' : [90, 20, 50, 30, 57, 67, 89, 79, 45, 23], 
    'english' : [40, 21, 68, 89, 90, 87, 89, 54, 21, 23] 
}) 

और मैं कुछ पांडा तरीकों का उपयोग करके यह करने के लिए सूचकांक परिवर्तित करना चाहते हैं। (उदा। Set_index, ढेर ,,,)

df1 = pd.DataFrame(np.random.randint(1, 100, (5, 4)), 
      columns = [['A', 'A', 'B', 'B'],['english', 'math', 'english', 'math']], 
      index = [1, 2, 3, 4, 5]) 

मैं यह कैसे कर सकते हैं?

उत्तर

7

मैं तुम्हें देगी के लिए unstack साथ set_index की जरूरत है, तो स्तरों MultiIndex में स्तंभों में swaplevel और पिछले प्रकार कॉलम द्वारा sort_index द्वारा स्वैप:

df1 = df.set_index(['number','class']).unstack().swaplevel(0,1,1).sort_index(1) 

print (df1) 
class  A   B  
     english math english math 
number       
1   40 90  87 67 
2   21 20  89 89 
3   68 50  54 79 
4   89 30  21 45 
5   90 57  23 23 

stack और unstack साथ एक अन्य समाधान:

print (df.set_index(['number','class']).stack().unstack([1,2])) 
class  A   B  
     english math english math 
number       
1   40 90  87 67 
2   21 20  89 89 
3   68 50  54 79 
4   89 30  21 45 
5   90 57  23 23 
2

मुझे @jezrael बहुत पसंद है, लेकिन सिर्फ पूर्णता के लिए - आप pandas.DataFrame.pivot_table का भी उपयोग कर सकते हैं set_index + unstack:

>>> df.pivot_table(index='number', columns='class').swaplevel(axis=1).sort_index(1) 
class  A   B  
     english math english math 
number       
1   40 90  87 67 
2   21 20  89 89 
3   68 50  54 79 
4   89 30  21 45 
5   90 57  23 23