2013-01-13 16 views
11

अगर मैं निम्नलिखित DataframeConvert पांडा समूह बहु अनुक्रमित करने के लिए Dataframe

>>> df = pd.DataFrame({'Name': ['Bob'] * 3 + ['Alice'] * 3, \ 
'Destination': ['Athens', 'Rome'] * 3, 'Length': np.random.randint(1, 6, 6)}) 
>>> df  
    Destination Length Name 
0  Athens  3 Bob 
1  Rome  5 Bob 
2  Athens  2 Bob 
3  Rome  1 Alice 
4  Athens  3 Alice 
5  Rome  5 Alice 

मैं नाम और गंतव्य से Goup कर सकते हैं ...

>>> grouped = df.groupby(['Name', 'Destination']) 
>>> for nm, gp in grouped: 
>>>  print nm 
>>>  print gp 
('Alice', 'Athens') 
    Destination Length Name 
4  Athens  3 Alice 
('Alice', 'Rome') 
    Destination Length Name 
3  Rome  1 Alice 
5  Rome  5 Alice 
('Bob', 'Athens') 
    Destination Length Name 
0  Athens  3 Bob 
2  Athens  2 Bob 
('Bob', 'Rome') 
    Destination Length Name 
1  Rome  5 Bob 

है, लेकिन मैं एक नया बहु चाहते हैं इससे बाहर -indexed dataframe कि

   Length 
Alice Athens  3 
     Rome   1 
     Rome   5 
Bob  Athens  3 
     Athens  2 
     Rome   5 

तरह दिखता है ऐसा लगता हैकी तरह कुछ करने के लिए एक तरह से होना चाहिएको मेरे बहु-अनुक्रमित डेटाफ्रेम प्राप्त करने के लिए, लेकिन इसके बजाय मुझे PandasError ("डेटाफ्रेम कन्स्ट्रक्टर ठीक से नहीं कहा जाता है!") प्राप्त होता है।

इसे पाने का सबसे आसान तरीका क्या है? साथ ही, किसी को भी पता है कि क्या कभी भी समूह के ऑब्जेक्ट को कन्स्ट्रक्टर को पास करने का विकल्प होगा, या अगर मैं इसे गलत कर रहा हूं?

धन्यवाद

उत्तर

12

आप इसी तरह से अनुक्रमित पंक्तियों के योग नहीं कर रहे हैं के बाद से, स्तंभ नामों की सूची के साथ सूचकांक सेट करके देखें।

In [2]: df.set_index(['Name', 'Destination']) 
Out[2]: 
        Length 
Name Destination   
Bob Athens   3 
     Rome    5 
     Athens   2 
Alice Rome    1 
     Athens   3 
     Rome    5