2016-05-19 19 views
5

मैं DataFrame निम्नलिखित है:पंक्तियों की Dataframe में ट्रांस्फोर्मिंग Dataframe कॉलम

          amount 
retailer_name store_number year product   
CRV   1946   2011 a    8 
       1947   2012 a    6 
          2013 c   11 
       1948   2011 a    6 
           b    1 
       1949   2012 a   12 
Walmart  1944   2010 a    5 
       1945   2010 b    5 
       1947   2010 b   10 
       1949   2012 a    5 

पंक्तियों की dataframe में:

retailer_name store_number year a b c 
CRV   1946   2011 8 0 0 
CRV   1947   2012 6 0 0 
etc... 

उत्पादों

data = {'year': [2010, 2010, 2011, 2012, 2011, 2012, 2010, 2011, 2012, 2013], 
     'store_number': ['1944', '1945', '1946', '1947', '1948', '1949', '1947', '1948', '1949', '1947'], 
     'retailer_name': ['Walmart','Walmart', 'CRV', 'CRV', 'CRV', 'Walmart', 'Walmart', 'CRV', 'CRV', 'CRV'], 
     'product': ['a', 'b', 'a', 'a', 'b', 'a', 'b', 'a', 'a', 'c'], 
     'amount': [5, 5, 8, 6, 1, 5, 10, 6, 12, 11]} 

stores = pd.DataFrame(data, columns=['retailer_name', 'store_number', 'year', 'product', 'amount']) 
stores.set_index(['retailer_name', 'store_number', 'year', 'product'], inplace=True) 

stores.groupby(level=[0, 1, 2, 3]).sum() 

मैं Dataframe निम्नलिखित बदलना चाहते हैं आगे जाना जाता है। कोई विचार यह कैसे करना है?

उत्तर

8

कृपया समाधान के लिए नीचे देखें। मूल पोस्ट में सुधार के लिए एडचम के लिए धन्यवाद।

reset_index बिना()

stores.groupby(level=[0, 1, 2, 3]).sum().unstack().fillna(0) 




       amount   
product        a b c 
retailer_name store_number year    
CRV   1946   2011  8 0 0 
       1947   2012  6 0 0 
          2013  0 0 11 
       1948   2011  6 1 0 
       1949   2012  12 0 0 
Walmart  1944   2010  5 0 0 
       1945   2010  0 5 0 
       1947   2010  0 10 0 
       1949   2012  5 0 0 

reset_index साथ ()

stores.groupby(level=[0, 1, 2, 3]).sum().unstack().reset_index().fillna(0) 



    retailer_name store_number year amount   
product          a b c 
0     CRV   1946 2011  8 0 0 
1     CRV   1947 2012  6 0 0 
2     CRV   1947 2013  0 0 11 
3     CRV   1948 2011  6 1 0 
4     CRV   1949 2012  12 0 0 
5    Walmart   1944 2010  5 0 0 
6    Walmart   1945 2010  0 5 0 
7    Walmart   1947 2010  0 10 0 
8    Walmart   1949 2012  5 0 0 
+0

यह शायद सही जवाब है, लेकिन आप शायद 'reset_index()' और 'fillna कॉल करने की आवश्यकता (0)' और यह भी नहीं बल्कि एक छवि 'stores.groupby (स्तर = [0, 1 से पाठ पोस्ट, 2, 3])। Sum() unstack()। Fillna (0) .reset_index() ' – EdChum

+0

क्योंकि ओपी ने खुदरा विक्रेता_नाम दोहराना दिखाया है, ऐसा लगता है कि वे इंडेक्स – EdChum

+0

@ नाइटवाल्कर' स्टोर्स.groupby को पुनर्स्थापित करना चाहते हैं (स्तर = [0, 1, 2, 3]) [ 'राशि']। योग()। unstack()। fillna (0) .reset_index() 'मूल रूप से आप का उपयोग कर का चयन' [] 'groupby' वस्तु – EdChum

7

unstack सूचकांक से product और शून्य के साथ NaN मान भरें।

df = stores.groupby(level=[0, 1, 2, 3]).sum().unstack('product') 
mask = pd.IndexSlice['amount', :] 
df.loc[:, mask] = df.loc[:, mask].fillna(0) 

>>> df 
           amount   
product        a b c 
retailer_name store_number year    
CRV   1946   2011  8 0 0 
       1947   2012  6 0 0 
          2013  0 0 11 
       1948   2011  6 1 0 
       1949   2012  12 0 0 
Walmart  1944   2010  5 0 0 
       1945   2010  0 5 0 
       1947   2010  0 10 0 
       1949   2012  5 0 0 
संबंधित मुद्दे