2017-02-02 17 views
7

मैं एक नया डेटाफ्रेम बनाने के लिए समूह का उपयोग करने की कोशिश कर रहा हूं, लेकिन मुझे बहु इंडेक्स को सुसंगत होने की आवश्यकता है। उप श्रेणी मौजूद है या नहीं की परवाह किए बिना, मैं इसे की तरह बनाया जा करना चाहते हैं निम्नलिखित:पांडस ग्रुपबी लगातार स्तर

import pandas as pd 

df = pd.DataFrame(
    {'Cat 1':['A','A','A','B','B','B','B','C','C','C','C','C','D'], 
    'Cat 2':['A','B','A','B','B','B','A','B','B','B','B','B','A'], 
    'Num': [1,1,1,1,1,1,1,1,1,1,1,1,1]}) 
print df.groupby(['Cat 1','Cat 2']).sum() 
उत्पादन है कि लग रहा है के साथ

की तरह:

   Num 
Cat 1 Cat 2  
A  A  2 
     B  1 
B  A  1 
     B  3 
C  B  5 
D  A  1 

लेकिन मैं चाहता हूँ यह

तरह देखने के लिए
   Num 
Cat 1 Cat 2  
A  A  2 
     B  1 
B  A  1 
     B  3 
C  A  Nan 
     B  5 
D  A  1 
     B  Nan 

मैं अलग डेटा है कि तब इस प्रारूप में एक कॉलम जोड़ने पर पढ़ा तो परिणामी सरणी कुछ ऐसा दिखाई देगा:

   Num  Num_added_later 
Cat 1 Cat 2     
A  A  2   12 
     B  1   5 
B  A  1   5 
     B  3   3 
C  A  Nan  5 
     B  5   5 
D  A  1   1 
     B  Nan  3 

उत्तर

5

आप एक नया दो बिल्ली कॉलम और पुन: अनुक्रमणिका अपने परिणामों के आधार पर सूचकांक बना सकते हैं:

import pandas as pd 
new_index = pd.MultiIndex.from_product([df["Cat 1"].unique(), df["Cat 2"].unique()], names = ["Cat 1", "Cat 2"]) 

df.groupby(['Cat 1','Cat 2']).sum().reindex(new_index) 

enter image description here

4

यह एक hack1 है! का उपयोग करें @ Psidom के जवाब

df.groupby(['Cat 1','Cat 2']).sum().unstack().stack(dropna=False) 

      Num 
Cat 1 Cat 2  
A  A  2.0 
     B  1.0 
B  A  1.0 
     B  3.0 
C  A  NaN 
     B  5.0 
D  A  1.0 
     B  NaN 

ठीक है, शायद कम एक हैक लेकिन ...

enter image description here

+3

मुझे नहीं लगता कि यह इतना hacky है। इरादा भी संवाद नहीं किया जाता है, लेकिन फिर भी यह बहुत चालाक है। –

+1

मुझे यह हैक पसंद है! – MaxU

संबंधित मुद्दे